0

私の問題は基本的にこれです:

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)

このアプローチは私にはかなり美しいように見えますが、それでも実装する方法を見つけることができません。

クエリがインスタンス化される直前にインスタンスレベルで呼び出されるスコープメソッドを作成する方法はありますか?

4

1 に答える 1

0

結局のところ、現在のバージョンのMongoidと開発中のバージョンでは不可能です。

https://github.com/mongoid/mongoid/issues/2652

于 2012-12-25T20:03:06.367 に答える