【问题标题】:Adding a favorites association to a user model in Rails在 Rails 中向用户模型添加收藏夹关联
【发布时间】:2015-04-21 05:57:18
【问题描述】:

我正在开发一款 Rails 测试应用,其中包含美国国会的法案和立法者数据。

我有一个(站点)用户模型和一个立法者模型。我希望允许用户将个人立法者添加到他们的收藏夹中。现在我有以下模型(省略了不必要的部分):

class User < ActiveRecord::Base
  has_many :favorites
  has_many :legislators, through: :favorites
end

class Legislator < ActiveRecord::Base
  has_many :bills
  has_many :favorites
  has_many :users, through: :favorites
end

class Favorite < ActiveRecord::Base
  belongs_to :user
  belongs_to :legislator
end

我试图弄清楚这是否是建立这些关联的正确方法。在 Rails 控制台中,如果我尝试这样做:

User.first.favorites.create(legislator_id: 123)

然后收藏夹被创建了,但是这个新创建的收藏夹的 user_id 字段为 nil:

=> #<Favorite id: 5, user_id: nil, legislator_id: 145, ... >

我希望将 user_id 自动分配给调用 .favorites.create 的用户,这样我就不必这样做了

User.first.favorites.create(legislator_id: 123, user_id: User.first.id).  

我必须修改什么才能让它工作?

【问题讨论】:

  • 您使用哪个版本的 Rails?另外,我已经从您的问题中删除了迁移和架构 - 在这里都没有告诉我们太多。

标签: ruby-on-rails ruby model-view-controller


【解决方案1】:

您所做的是用户和立法者之间通过收藏夹建立的多对多关系。您无需显式创建收藏夹对象,因为 Rails 会处理这些。

legislator = Legislator.first
User.first.legislators << legislator

这将创建必要的收藏条目。请注意,默认情况下不检查收藏夹的唯一性,因此可以有许多条目反映同一用户和立法者之间的关系。要处理这个添加到收藏模型:

validates_uniqueness_of :user_id, :scope => :legislator_id

【讨论】:

    【解决方案2】:

    您好,您正在做的似乎与此案例非常相似,我认为可以解决您的问题,看看HERE in this question

    【讨论】:

    • 如果您想指出一个现有的问题,请在评论中这样做。此外,此特定问题不适用,因为发帖人询问的是 has_many 关联,而不是 has_many :through
    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多