From ee530072eb38358f1bfdbdc59881c9818e6d78ff Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Thu, 8 Aug 2013 21:50:03 +0200 Subject: [PATCH] Added package.text_search for full-text searching the Package model --- app/models/package.rb | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/app/models/package.rb b/app/models/package.rb index 3662f02..320d21b 100644 --- a/app/models/package.rb +++ b/app/models/package.rb @@ -1,3 +1,20 @@ 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("packages.name @@ :q or packages.description @@ :q", q: query).order("#{rank} desc") + else + scoped + end + end end