将收藏夹关联添加到 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
我正在开发一个 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