0

Mongo のドキュメント サブキー インデックスを利用する関連付けをまとめようとしています。たとえば、投稿とトピックの 2 つのコレクションがあります。投稿には、投稿のタグのインデックス付きセットであるタグ キーがあります。私がやりたいことは、Topic モデルに次のようなものを含めることです。

class Topic
  key :name, String
  many :posts, :query_conditions => {:tag => lambda {|i| i.name} }
end

「mongomapper」という名前のトピックがあるという考えは、@topic.posts を呼び出すときに、関連付けが次と同等のものを実行するようにしたいということです。

post.find({tag: "mongomapper"})

AR の finder_sql オプション (インスタンスごとの値をクエリに補間する機能を備えたもの) のようなものが事実上必要ですが、これは MM 関連付けオプションではまだ見つけることができませんでした。そのようなものは存在しますか?

4

1 に答える 1

3

MM の内部を掘り下げた後、これは起こらないと判断しました。具体的には、has_many 関連付けは、クエリへの :foreign_key => proxy_owner._id の追加によって常に制約されます。その基準が追加されないようにする方法はありません。つまり、カスタム ファインダーとの関連付けを設定することはできません。

Post モデルで名前付きスコープを使用し、Topic モデルでヘルパー メソッドを使用しました。

class Post
  scope :tagged, lambda {|tag| where(:tags => tag)}
end

class Topic
  def posts
    Post.tagged(name.downcase)
  end
end

これによりクエリ プロキシが返されるため、すべての意図と目的において、これを読み取り専用の関連付けのように扱うことができます。十分に機能します。

于 2010-08-12T02:01:50.477 に答える