ActiveRecord关联我应该使用3个连接表吗?

时间:2015-11-17 22:54:11

标签: ruby-on-rails activerecord rails-activerecord

我目前有3个表和3个连接表

用户 项目 材料

用户有许多项目和材料

项目有很多用户和材料

材料有很多项目和用户

他们每个人都有各自的联接表

说材料有一个列"名称"和"金额"。我如何形成关联,以便对于相同的材料实例,它对项目和用户具有不同的数量?

我目前正在存储"金额"在他们的连接表中,因此UserMaterial和ProjectMaterial具有不同的"金额"。问题是当我从用户查询材料时,我将不得不进行2次单独的查询。一个从Materials表中获取Material名称的数组,

user.materials    

和另一个从UserMaterial获取数量的数组。

user.usermaterials

我的协会有问题/改善吗?或者是否有一个查询方法来组合这两个数组,将正确的名称和数量附加到正确的ID?

感谢任何帮助。谢谢

1 个答案:

答案 0 :(得分:0)

如果您在user.materials上查询,则必须通过user_materials加入。如果您使用includes,则可以在一个查询中同时获取。

user_materials = @user.user_materials.includes(:material)

然后,当你循环时,user_material.material关联将已经加载并为你做好准备。

user_materials.each do |um| 
  name = um.material.name # material is already loaded
end