【问题标题】:Mongoid: belongs_to user and has_one userMongoid:belongs_to 用户和 has_one 用户
【发布时间】:2012-05-02 08:31:52
【问题描述】:

我在我的应用中使用 Mongoid,但在为用户和订阅设置正确关系时遇到问题。

我需要做的就是为 UserSubscription 模型建立一个简单的“有一个和属于一个”关系。

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

如何实现?谢谢你的帮助。

【问题讨论】:

    标签: ruby-on-rails mongoid


    【解决方案1】:

    问题是你有两个同名的关系,你的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
    

    【讨论】:

    • 谢谢!当我将用户类的 has_many 关系更改为:has_many :subscriptions, :class_name => "Subscription", :inverse_of => :owner
    • 而不是创建更新怎么样?我使用了 update_sucription 但我得到了一个错误,它说未定义的方法..
    猜你喜欢
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多