我第一次使用 has_many through,尽管在此处和指南中阅读了大量内容,但 我不了解访问通过表上的属性的正确方法。我的表格与另一篇文章中的示例相同。
class Product < ActiveRecord::Base
has_many :collaborators
has_many :users, :through => :collaborators
end
class User < ActiveRecord::Base
has_many :collaborators
has_many :products, :through => :collaborators
end
class Collaborator < ActiveRecord::Base
belongs_to :product
belongs_to :user
end
假设 collaborators 表具有附加属性,例如 hours_spent,那么从特定用户和产品的 collaborator 表中找到 hours_spent 的正确方法是什么?
当我通过产品找到我的用户并像在
@product.users.each do |user|
这似乎有效
user.collaborator[0].hours_spent
我得到了正确的值,但由于每个用户/产品对应该只有一个合作者记录,所以索引让我失望,让我觉得我做错了什么。
感谢您的阅读!
编辑
也许我没有通过概念获得 has_many 。也许一个 MySQL 示例会有所帮助。
我在想的是,如果我这样做了
SELECT * FROM collaborators where user_id = 1;
我希望结果是一组(零个或更多)。相似地
SELECT * FROM collaborators where product_id = 1;
也会给我一套,但是
SELECT * FROM collaborators where user_id = 1 and product_id = 1;
最多会给出 1 行。
如果我理解正确,所有 3 个查询都会返回一个集合。所以我想我需要某种唯一性约束,但这必须是一个复合键,在两个属于键上。这甚至可能吗?有没有更好地模拟这个的结构?
非常感谢您的快速和有用的回复!