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

时间:2015-02-19 18:22:22

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

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

我需要修改什么才能使其正常工作?

2 个答案:

答案 0 :(得分:3)

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

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

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

validates_uniqueness_of :user_id, :scope => :legislator_id

答案 1 :(得分:-1)

嗨,你正在做的事情似乎与这种情况非常相似,我认为解决了你的问题,看看HERE in this question