将收藏夹关联添加到 Rails 中的用户模型

Adding a favorites association to a user model in Rails

我正在开发一个 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).  

我需要修改什么才能让它工作?

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

您正在做的是通过收藏夹在用户和立法者之间建立 many-to-many 关系。您不需要明确创建收藏夹 objects,因为 Rails 会处理它。

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

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

validates_uniqueness_of :user_id, :scope => :legislator_id