Forum: Ruby on Rails advance search using pg_search gem passing three, two, one o nome parameters.

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
A4d2ee843ae03aadc6a980fc06a1cb2d?d=identicon&s=25 Jean (Guest)
on 2013-01-08 23:59
(Received via mailing list)
Hello I trying this search

pg_search_scope :advance_search, against: [:title, :place, :category],
using: { tsearch: { dictionary: "spanish"} }


def self.searchadv(title, place, category)
     advance_search(:title => title, :place => place, :category =>
category)
end

I could not make this work, I always get cero records, but I have
records
with the parameters I'm passing. By the way no all the parameter need to
be
present in the passing, for example I can search just using the title, o
title and place or place or category or all together.

Thanks for your help, I really need it.
164e9b4f963e5bc53883bb86beb8cd4a?d=identicon&s=25 Grant Hutchins (Guest)
on 2013-03-03 21:23
(Received via mailing list)
Hi Jean, sorry for the late reply.

When you create a search method using pg_search_scope, it takes only one
parameter, a string query.

So for your example, you should not pass a Hash into your advance_search
method.

Instead, imagine a user wants to find things with the title "Moby Dick"
in
the place "Paris" with the category "Novel". They could type into a
search
box the single string "moby dick paris novel" and you could call
advance_search this way:

  advance_search("moby dick paris novel")

or

  advance_search(params[:query]) # this assumes you are in a Rails
controller and you have a form that submits a param named "query"

If you are trying to search separately by different fields, then
pg_search
is not the correct solution. You could try something like this:

  def self.searchadv(title, place, category)
    where(:title => title, :place => place, :category => category)
  end

But that will only find exact matches. Doing something more advanced
than
this is an exercise for the reader.

Grant
This topic is locked and can not be replied to.