2010-03-24 2 views
3

레일 2.3.5를 사용하고 있습니다.중첩 된 has_many

Class User < ActiveRecord::Base 
    has_many :phones 
end 

class Phone < ActiveRecord::Base 
    has_many :frequency_bands 
end 

사용자의 모든 frequency_bands를 가져오고 싶습니다. 나는 사용자에 대해 def freq_bands 메소드를 작성할 수 있지만 user에 대해 has_many freq_bands를 가질 수 있는지 알고 싶습니다. 이 방법으로 나는 전화를 연결할 수 있습니다. 내가하고 싶은 무엇

내가 그것을 내가 좋아하는 것, 가능하면 다른 플러그인을 사용하지 않도록이 플러그인 그러나 http://github.com/ianwhite/nested_has_many_through

를 사용하여 중첩 된 has_many을 가질 수 있습니다 생각하고 전적으로 의존

class User < ActiveRecor::Base 
    has_many :frequence_bands, :through => phones 
end 

입니다 울타리.

+1

레일은 이것을 이미하지 않았습니까? 그것은 당신이 묘사 한 것과 똑같이 작동합니다. 'has_many : frequency_bands, : through => : phones'. – jamuraa

답변

7
class User < ActiveRecord::Base 
    has_many :phones 
    has_many :frequence_bands, :through => :phones 
end 

잘 작동합니다. 전화기 자체가 has_many_through 관계이기도 한 경우에만 중첩 된 has_many_through 플러그인이 필요합니다.이 관계는 사용자의 예제와 다릅니다.

(편집자 : 그리고 잊지 않는다 ":"마지막 속성 앞에) 레일 3

+0

참이거나, 또 다른 * 깊이의 깊이를 원한다면. 물론 너무 많은 레벨은 앱에 좋지 않습니다. 나는 그것을 수행하는 방법을 통해 블로그 게시물을 작성했습니다 : http://kconrails.com/2010/01/28/nesting-has_many-through-relationships-in-ruby-on-rails/ - 아껴서 사용하십시오! –

+0

여전히 Rails 4에서 작동합니다. 참고 : 연결에 다른 이름을 사용하는 경우 a : source를 지정해야합니다. 예를 들어, 'has_many : my_frequency_bands, through : : phones, source : : frequency_bands' – robertwbradford