我有一个用例,在每个 session 中,我需要对所有searchkick查询添加一个where子句。从根本上来说,我有来自多个数据库中多个客户端的数据,而searchkick索引包含一个名为client_id的字段。

我不想为所有查询继续这样做。我可以说有什么方法可以向此 session 中的所有searchkick查询添加一个位置:{client_id:“XXXX”}。

最佳答案

您可以重新定义单例方法,以在类定义中的searchkick之后添加“where:”参数自动添加:

class<<Product
  alias oldsearch search
    def search(s, l, o)
      oldsearch s, where: {client_id: "XXXX"}, limit: l, offset: o
    end
end
$ irb
2.2.0 :001 > class A

# searchkick adds his methods to your model like this:

2.2.0 :002?>   class<<self
2.2.0 :003?>     def a
2.2.0 :004?>       puts 'a'
2.2.0 :005?>       end
2.2.0 :006?>     end

# and you are adding following:

2.2.0 :007?>   class<<self
2.2.0 :008?>     alias b a
2.2.0 :009?>     def a
2.2.0 :010?>       puts 'a-new'
2.2.0 :011?>       b
2.2.0 :012?>       end
2.2.0 :013?>     end
2.2.0 :014?>   end
 => :a
2.2.0 :015 > A.a #=> a-new
                 #   a

而且,当然,您可以只创建一个包装器方法,该方法使用所需的参数调用Product.search

关于ruby-on-rails - 始终向searchkick查询添加默认的where子句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28967585/

10-13 00:37