在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能自动分配给调用.foldites.create的用户,这样我就不必进行

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

我必须修改什么才能使其工作?

您正在做的是通过收藏夹在用户和立法者之间建立多对多关系。您不需要在Rails处理时显式地创建收藏夹对象。

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

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

validates_uniqueness_of :user_id, :scope => :legislator_id

嗨,你所做的似乎与本案非常相似,我认为这解决了你的问题,看看这个问题中的此处

最新更新