2012-05-02 16 views
8

私はMongoidを私のアプリケーションに使用しています。ユーザと購読の正しい関係を設定する際に問題があります。Mongoid:belongs_to userとhas_one user

私がする必要があるのは、UserSubscriptionモデルのシンプルな「1つで、1つに属する」関係を作ることだけです。

class User 
    has_many :user_subscriptions 
end 

class UserSubscription 
    belongs_to :user 

    has_one :user # user2 to which user1 is subscribed 
    field :category, :String 
end 

私がやりたいすべてはユーザーごとにサブスクリプションのリストを持つことです。

> user1.user_subscriptions # list of subscription objects 
> user1.user_subscriptions << UserSubscription.create(:user => user2, :category => 'Test') 
> user1.user_subscriptions.where(:user => user2).delete_all 

これを実装する方法は?ご協力ありがとうございます。

答えて

10

問題は、同じ名前の2つのリレーションがあり、has_one :userリレーションシップの逆関係が必要であることです。あなたは、常にこのような何かを試みることができる:

> user1.create_subscription(:subscriber => user2, :category => "Test") 
> user1.subscriptions.where(:subscriber => user2).delete_all 
+1

ありがとう:

class User include Mongoid::Document has_many :subscriptions has_many :subscribers, :class_name => "Subscription", :inverse_of => :subscriber end class Subscription include Mongoid::Document field :category belongs_to :owner, :class_name => "User", :inverse_of => :subscriptions belongs_to :subscriber, :class_name => "User", :inverse_of => :subscribers end 

は、その後、あなたがのようなものを行うことができるはず! Userクラスのhas_many関係を変更すると動作します: has_many:サブスクリプション:class_name => "Subscription"、:inverse_of =>:owner –