在我的product_users
联合表格中,product_id
和user_id
之外还有一个角色列。
我的产品型号中有这种关联。
has_many :owners, -> { where(product_users: { role: "owner" }) },
through: :product_users, source: :user
所有产品只有一个"所有者"其余的将是"会员"。
我应该使用什么关联来获取产品的owner
而不是owners
集合。所以在我想要使用product.owner
的观点中。我无法弄清楚如何使用has_one
或belongs_to
。
我可以使用这个实例方法,但我想最好以某种方式定义一个精细的关联。
def owner
owners.first
end
答案 0 :(得分:1)
我想最简单的方法就是在产品中添加一列“owner_id”。然后,在产品上:
belongs_to :owner
以及用户类似的东西
has_many :owned_products, class_name: "Product", foreign_key: "owner_id"
“class_name”告诉关联您将要查找“Product”和foreign_key,将定义将用于与用户ID进行比较的列。
如果您不想添加其他列,那么您可以将关联命名为“has_many:owner”,但这在很多级别上都是错误的,您不应该这样做。因此,如果您不想添加其他列,请坚持使用该方法。
def owner
owners.first
end