rails4 范围 has_many 协会
rails4 scoped has_many association
在我的 product_users
联合 table 中,除了 product_id
和 user_id
之外还有一个角色栏。
我的产品模型中有此关联。
has_many :owners, -> { where(product_users: { role: "owner" }) },
through: :product_users, source: :user
所有产品将只有一个 "owner",其余为 "member"。
我应该使用什么关联来获取产品的 owner
而不是 owners
集合。所以在视图中我想使用 product.owner
。我不知道如何使用 has_one
或 belongs_to
.
我可以使用这个实例方法,但我想以某种方式定义一个精细的关联会更好。
def owner
owners.first
end
我想最简单的方法是在产品中添加一列 "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
在我的 product_users
联合 table 中,除了 product_id
和 user_id
之外还有一个角色栏。
我的产品模型中有此关联。
has_many :owners, -> { where(product_users: { role: "owner" }) },
through: :product_users, source: :user
所有产品将只有一个 "owner",其余为 "member"。
我应该使用什么关联来获取产品的 owner
而不是 owners
集合。所以在视图中我想使用 product.owner
。我不知道如何使用 has_one
或 belongs_to
.
我可以使用这个实例方法,但我想以某种方式定义一个精细的关联会更好。
def owner
owners.first
end
我想最简单的方法是在产品中添加一列 "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