我的问题基本上是这样的:
我想在search(query)
我的 Document 模型中添加一个带参数的命名范围,以便能够使用 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)
这种方法对我来说似乎相当漂亮,但我仍然找不到实现它的方法。
有没有办法在查询实例化之前创建一个将在实例级别调用的范围方法?