有可能做一个双has_many:通过rails中的关联?

时间:2011-03-08 13:54:07

标签: ruby-on-rails ruby

我有四个模型:a,b,c,d

这就是我想要做的事情:

a has_many b, :through => c
a has_many d, :through => b

以便在控制台中我可以这样做:

a.b
a.b.first.d
a.d

目前前两个命令可以正常工作但是在第三个命令上我得到了一个SQL错误。它似乎试图直接通过b得到d并且没有意识到a - > b经过c。

如何解决?

2 个答案:

答案 0 :(得分:12)

对于遇到它的任何人都可以快速更新,这可以在Rails 3.1之后实现:http://guides.rubyonrails.org/3_1_release_notes.html

在您的示例中,以下是它的外观:

Class A
  has_many :c
  has_many :b, :through => :c, :source => :b
  has_many :d, :through => :b, :source => :d
end

Class C
  has_many :b
  has_many :d, :through => :b, :source => :d
end    

Class B
  has_many :d
end

Class D

end

只是为了澄清!

答案 1 :(得分:5)

我认为您不能直接致电a.d但是您可以a.b.map(&:d).flatten获取d a的所有{{1}}