Rails:在多对多关系中使用关联和连接表

时间:2014-10-28 22:32:07

标签: ruby-on-rails activerecord many-to-many associations jointable

我有一个用户模型和一个带有多对多关联的产品模型,在这两个模型中我都有" has_and_belongs_to_many"

我知道这可以让我处理这样的关系:

user = User.first

user.products #shows all products bought by a user

product = Product.first

product.users # show all users who bought that product

但可能还有一款产品尚未被任何用户购买,因此该产品将位于产品表中,但不会出现在 user_products 连接表中。

如何仅返回已在联接表中保存的用户 - 产品关联?

另外,假设我想要创建一个产品,同时定义它已经被 - 属于 - 第一和第二个用户购买。我想到了:

User.all[0..1].each {|usr| usr.product.create(name: "tv")}

这是暗示关联并使用记录填充连接表的正确方法吗?

如上所述,如果我的产品在产品表中,但仍然没有用户购买它,现在用户购买了它:我怎么能表达这个所以以后我可以做

user.products

并查看该产品

1 个答案:

答案 0 :(得分:1)

  

如何仅返回已保存在连接表中的用户 - 产品关联?

你不能,因为你决定使用has_and_belongs_to_many,根本无法访问连接表。考虑使用has_many through关系。

  

这是暗示关联并使用记录填充连接表的正确方法吗?

应该是:

User.limit(2).each {|usr| usr.products.create(name: "tv")}

User.limit(2).each {|usr| usr.products << Product.create(name: "tv")}
  

如上所述,如果我有一个产品在产品表中,但仍然没有用户购买它,现在用户购买它:如何表达这一点以便以后我可以做什么

只需user.products.reload