rails4 scoped has_many association

时间:2016-05-20 12:52:40

标签: ruby-on-rails scope associations

在我的product_users联合表格中,product_iduser_id之外还有一个角色列。

我的产品型号中有这种关联。

has_many :owners, -> { where(product_users: { role: "owner" }) }, 
                     through: :product_users, source: :user

所有产品只有一个"所有者"其余的将是"会员"。 我应该使用什么关联来获取产品的owner而不是owners集合。所以在我想要使用product.owner的观点中。我无法弄清楚如何使用has_onebelongs_to

我可以使用这个实例方法,但我想最好以某种方式定义一个精细的关联。

def owner
  owners.first
end

1 个答案:

答案 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