class Package < ActiveRecord::Base has_many :screenshots, :inverse_of=>:package # Use PostgreSQL's full-text search capability for the user search def self.text_search(query) if query.present? # Add a rank column to each result rank = <<-RANK ts_rank(to_tsvector(packages.name), plainto_tsquery(#{sanitize(query)})) + ts_rank(to_tsvector(packages.description), plainto_tsquery(#{sanitize(query)})) RANK # Do the full-text search and return results by rank where("to_tsvector('english', packages.name) @@ plainto_tsquery(:q) or to_tsvector('english', packages.description) @@ plainto_tsquery(:q) ", q: query).order("#{rank} desc") else scoped end end end