Active Record中的访问属性'通过'关联对象

时间:2015-03-03 17:05:40

标签: ruby activerecord

我有两个课程,UserProduct在多对多的课程中通过'关联,使用类Prole(用于产品角色)。

class User < ActiveRecord::Base
  has_many :proles
  has_many :products, through: :proles
end

class Product < ActiveRecord::Base
  has_many :proles
  has_many :users, through: :proles
end

class Prole < ActiveRecord::Base
  # has an attribute called 'role'
end

prole有一个名为role的属性,我想用它来限定用户 - 产品关联。

该关联工作正常,但我无法弄清楚如何在创建关联后访问role属性。例如,如果我这样做:

user.products << product

如何访问刚创建的prole对象中的属性?

我想我可以遍历prole对象并找到正确的对象,但我希望有更清洁的方式。

这可能吗?任何提示?

TIA。

我希望有更直接的东西,但是这里有一个 可能的答案:

prole = Prole.find_by user_id: user.id, product_id: product.id

甚至更好

prole = user.proles.where("product_id = #{product.id}")

1 个答案:

答案 0 :(得分:0)

经过一些测试后,看起来最简单的方法是抓住刚创建的Prole对象,直接通过Prole模型查询两个外键,如您可能的答案所示。

Prole.find_by(user_id: user.id, product_id: product.id)

如果您希望它作为user对象上的关联,您可以使用includes方法进行预先加载,但它仍然会为{{1}加载每个prole问题

user

有关详细信息,请参阅this answer。但看起来你可能的答案是最干净的方式。