私の問題は基本的にこれです:
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
(パフォーマンス上の理由から)、これらのオプションはクラスレベルであり、次のようにまだ初期化されていない可能性があるため、スコープブロックから指定できません。カミナリのこの例:
Document.search('graceful aubergine').page(5).per(10)
このアプローチは私にはかなり美しいように見えますが、それでも実装する方法を見つけることができません。
クエリがインスタンス化される直前にインスタンスレベルで呼び出されるスコープメソッドを作成する方法はありますか?