2

私はmongoDBの新機能を使用しています。私が取り組んでいる新しいレールプロジェクトに使用しています。 私が今やりたかったのは、(埋め込まれた)ドキュメントが別のコレクションを参照していて、異なる役割を持っていることでした。mongoid、ロールを使って参照を作成する

どういうわけか、これはうまくいかないようです。私は、外部のコレクションから埋め込まれたコレクションへの関係を定義することはできないことを知っています。だから、私の場合、ユーザーからLocationsにアクセスすることはできません。それでも、場所に新しい場所を追加しようとすると、エラーメッセージ​​が表示されるため、referenced_in :location部分を定義する必要があります。

これは単なる序文です。私の実際の問題は、これらの役割のことは動作していないようです。そのような新しい場所を場所locations.create(:user_a => some_user)に作成すると、user_bもそのユーザーに設定されます。

これを動作させる方法はありますか?または私は何か間違っているのですか?

私はあなたが(参照がreferenced_in側に保存されているため)2つの場所の関連付けを明確に持っていると思う
class Place 
    include Mongoid::Document 
    embeds_many :locations 
end 

class Location 
    include Mongoid::Document 
    embedded_in :place, :inverse_of => :locations 
    references_one :user_a, :class_name => "User" #, :stored_as => :array 
    references_one :user_b, :class_name => "User" #, :stored_as => :array 
end 

class User 
    include Mongoid::Document 
    referenced_in :location, :inverse_of => :dropper 
    referenced_in :location, :inverse_of => :picker 
end 
+0

mongoidバージョンを使用していますか? – shingara

+0

sry、完全に忘れてしまった:mongoid 2.0.0.beta20 on rail 3.0.3 – Dennis

答えて

1

class User 
    include Mongoid::Document 
    referenced_in :location_a, :inverse_of => :user_a, :class_name => "Location" 
    referenced_in :location_b, :inverse_of => :user_b, :class_name => "Location" 
end 

私はへのより良い方法があるかもしれないことを感じて助けることができませんしかし、これを行う...

これは良いアプローチですか?

class Location 
    include Mongoid::Document 
    embedded_in :place, :inverse_of => :locations 
    referenced_in :user_a, :class_name => "User" 
    referenced_in :user_b, :class_name => "User" 
end 

class User 
    include Mongoid::Document 
end 
+0

まあ、最初のものは動作しませんでした。しかし、2つ目は明らかに機能するようです。私はあなたがいつもreferences_xyzパーツを定義する必要があると思っていました。そして、このreferences_inは、両方のサイトを介して関連付けをナビゲートできるようにするために、オプションの "アドオン"です。しかし、私が今までに定義したすべてのテストは、現在通ります。ほんとありがと :) – Dennis

関連する問題