我们说我有三个型号。
User
,Tool
和Work
(实际上模型不同,但为了简单起见,这些人就是这样)。现在..
我User
Tool
,Tool
执行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
但这并没有完全符合预期(用户已经完成了多个作品),而是出现了错误......
我做错了什么?
答案 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
方法调用传递的选项。