【发布时间】:2012-12-23 13:53:46
【问题描述】:
我的问题基本上是这样的:
我想在我的 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)
这种方法对我来说似乎很漂亮,但我仍然找不到实现它的方法。
有没有办法在查询实例化之前创建将在实例级别调用的范围方法?
【问题讨论】:
标签: ruby-on-rails ruby scope mongoid