1

我试图找出如何使用pg_search_gem和pg_search_scope多个参数传递给我的搜索pg_search高级搜索的

这是我简单的搜索

include PgSearch 
    pg_search_scope :simple_search, against: [:title, :description], using: { tsearch: { dictionary: "spanish"} } 

def self.search(search) 
    if search.present? 
     simple_search(search) 
    else 
     find(:all) 
    end 
end 

但现在我正在努力做这样的事情

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

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

我知道这是完全错误的,但这是我的询问。


UPDATE

这里是新代码

pg_search_scope :advance_search, lambda {|*args, query| 
     return {:against => args, 
     :query => query, 
     using: { tsearch: { dictionary: "spanish"} } } 
    } 

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

仍然没有工作。但几乎完成了!我得到这个错误:

wrong number of arguments (3 for 4) 

回答

1

您可以使用dynamic search scopes

include PgSearch 
    pg_search_scope :simple_search, lambda do |query, *args| 
    return { :against => args, :query => query } 
    end 

def self.searchadv(query, title, place, category) 
    simple_search(query, :title => title, :place => place, :category => category) 
end 
+0

完成,但现在我又出现了另一个问题。我更新了我的代码,请你检查一下。 – Jean

+0

你没有将搜索查询传递给searchadv方法,该方法反过来应该将它传递给'advance_search'作用域 – mihai

+0

我更新了代码,但是现在我得到这个错误:参数的错误数量(3个为4个) – Jean

1

3年前,我在寻找这个问题的答案。所以,这是我找到的,它的工作原理。也许它会帮助某人:

我传递2个数组到搜索范围,一个与列和其他与查询。因此,您可以根据需要添加尽可能多的列和查询。

include PgSearch 
    pg_search_scope :advanced_search, (lambda do |args, query| 
    return { 
     :against => args, :query => query 
    } 
    end) 

Model.advanced_search([:name, :current_status, :user_id], 
      [params[:q_name], params[:q_status], params[:q_user]])