我正在开发一个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).
我需要修改什么才能使其正常工作?
答案 0 :(得分:3)
您正在做的是通过收藏夹在用户和立法者之间建立多对多的关系。当Rails处理时,您不需要显式创建“收藏夹”对象。
legislator = Legislator.first
User.first.legislators << legislator
这将创建必要的收藏夹条目。请注意,默认情况下,不检查“收藏夹”的唯一性,因此可以有许多条目反映同一用户和立法者之间的关系。要处理它,将其添加到收藏夹模型:
validates_uniqueness_of :user_id, :scope => :legislator_id
答案 1 :(得分:-1)
嗨,你正在做的事情似乎与这种情况非常相似,我认为解决了你的问题,看看HERE in this question