9

アプリにMongoidを使用していますが、ユーザーとサブスクリプションの正しい関係を設定するのに問題があります。

私がする必要があるのは、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

これを実装する方法は?助けてくれてありがとう。

4

1 に答える 1

12

問題は、同じ名前の2つの関係があり、関係には逆の関係が必要なことですhas_one :user。あなたはいつでもこのようなことを試すことができます:

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

次に、次のようなことができるはずです。

> user1.create_subscription(:subscriber => user2, :category => "Test")
> user1.subscriptions.where(:subscriber => user2).delete_all
于 2012-05-02T14:18:49.223 に答える