Advance search using pg_search gem passing three, two, one o nome parameters

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 =>

I could not make this work, I always get cero records, but I have
with the parameters I’m passing. By the way no all the parameter need to
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.

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

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

advance_search(“moby dick paris novel”)


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
is not the correct solution. You could try something like this:

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

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


This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs