2012-01-13 9 views
6

シンプルなhas_manyで2つのモデルを関連付ける必要があります。問題は、関連付けの主キーとしてid(_id)を使用したくないということです。私はまだモデルが他のすべてのためにデフォルトのObjectIdを使い続けることを望んでいます。Mongoid関連のカスタムキー

だから、基本的に私がしたい

を(これはRails3.1 + Mongoid上で実行されている):

class Message 
    ... 
    field :message_id, :default => proc { "fail-#{Time.now.to_f.to_s}" } 
    ... 
    has_many :message_reports, primary_key: :message_id, foreign_key: :message_id 
    ... 
end 
class MessageReport 
    ... 
    field :message_id, :default => proc { "fail-#{Time.now.to_f.to_s}" } 
    ... 
    has_many :message, primary_key: :message_id, foreign_key: :message_id 
    ... 
end 

は、これが唯一のActiveRecordのために働くだろう。 Mongoidはprimary_keyオプションをサポートしていません。

だから私はモンゴイドコレクションでどのように同じ結果を得ますか?

あなたが言う前に:ということをしない...

私は本当に正しいidがこれらのメッセージであるということです...とmessage_idsが一意のIDです。このフィールドにケイに必要とない理由メッセージを送信するために呼び出すAPIによって返されます。後でもう一方のコールバックで同じIDが受信されます。

私はちょうどクエリを実行し、メッセージから "関連する"レポートを見つけるための方法でそれを固執することができます。逆の場合もあります。可能であれば、それらを実際の関連付けにしたいと思います。

レポート受信プロセスを強制して関連付けのためのオブジェクトを検索して一致させることができますが、それは余分なものであり、何もしないこのデータを検証して保存するだけでなく、要するに

:私は、協会:)

+0

私は以前積極的に異議を唱えています: –

+0

hehe、前にオンラインで質問しました;) –

+0

@MartinWestinこれを解決しましたか?私はまったく同じ問題を持っています – jbnunn

答えて

1

この機能がさえマスター上で、実際にMongoid上に存在しないを好むだろうし、いくつかの機能要求を行い

Mongoid 3.0で計画されていません。 Mongoidコミュニティは、本当に良いアイデアなら、いくつかの新しい機能を追加するために本当に開いています。私にはいいアイデアです。