我的问题基本上是这样的:
我想在我的Document模型中添加一个带参数search(query)
的命名范围,以便能够使用Sphinx和Riddle搜索文档:
class Document
...
@@riddle=Riddle::Client.new
scope :search, ->(query){
where(:document_id.in => sphinx_get_ids(query))
}
def self.sphinx_get_ids(query)
@@riddle.query(query)[:matches].collect {|match| match[:attributes]["doc_id"]}
end
end
不介意类变量。
我想在查询命中索引之前设置谜语客户端的offset
和limit
参数(显然是出于性能原因),但我不能从范围块中指定这些选项,因为它们是类等级,并且,可能尚未初始化,例如在Kaminari的示例中:
Document.search('graceful aubergine').page(5).per(10)
这种方法对我来说似乎很漂亮,但我仍然无法找到实现它的方法。
有没有办法在查询实例化之前创建一个将在实例级别调用的范围方法?