在轨道中组装多个模型的关系 - 不可能?

时间:2014-06-14 11:35:15

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

我们说我有三个型号。

UserToolWork(实际上模型不同,但为了简单起见,这些人就是这样)。现在..

User ToolTool执行Work

User has many Tools
every Tool belongs to one User

Tool has many Works
every Work was done with single Tool

我可以成功获得User.tools,但我无法通过用户完成工作。

我试过了:

User.tools.each do |tool|
  tool.works.each do |work|
    <%= work.id %>
  end
end

但这并没有完全符合预期(用户已经完成了多个作品),而是出现了错误......

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您可以为同一个创建多对多关联

class User <  ActiveRecord::Base
  has_many :tools
  has_many :tasks , :through => :tools, :source => :works
end

class Tool <  ActiveRecord::Base
  belongs_to :user
  has_many :works
end

class Work <  ActiveRecord::Base
  belongs_to :tool
end

现在你可以做到:

@users = User.all
@users.each do |user|
  user.tasks do |task|
    <%= task.id %>
  end
end

确保迁移正确无误。所有 foreign_key / primary key 关系都应正确,否则您将收到未定义列错误。查看#has_many official doc以了解我通过has_many方法调用传递的选项。