2009-09-08 9 views
0

다형성 관계 뒤에 중첩 된 관계를 직접 사용자 지정 SQL을 사용하지 않고 직접 참조하는 방법이 있습니까? 아래 예제에서, LayerTwo를 참조하는 사용자의 has_many 관계를 정의하는 방법이 있습니까?has_many : through, 중첩 된 다형성 관계

나는 (사용자의) 할 싶습니다

has_many :layer_twos, :through => layer_ones 

그러나이 방법은 다형성의 관계를 통해 이전에 지정한 has_many 관계의 고려하지 않습니다. 어떤 제안? 그것은 아마도 기존의 철도 관행을 통해 가능하지 않을 수도 있지만, 나 자신보다 더 똑똑한 사람들에게 그 질문을 연기 할 것이라고 생각했습니다.

답변

1

내가 아는 한 ActiveRecord는 : through : through 관계를 지원하지 않습니다. 관계를보다 직접적인 것으로 다시 매핑하는 뷰를 만드는 것과 같은 몇 가지 트릭과 해킹을 사용하여이 문제를 해결할 수 있습니다. 데이터베이스 복잡성을 희생시키면서 ActiveRecord 모델을 단순화 할 수 있습니다.

다형성 연관은 특히 ornery입니다.

+0

감사 단지 누군가와 함께 다음을 확인되고 싶어 그밖에. –

1

나는 다형성 asociations을 통해 중첩에 대한 지원의 확실하지 않다하지만 README에서 nested_has_many_through 플러그인, 체크 아웃 가치가있을 수도 있습니다 : has_many :through 관계를 정의 할

... 가능하게한다을 그 다른 has_many:through 관계를 통해 가능하면 임의의 깊은 계층 구조를 통과합니다. 이 은 (당신은뿐만 아니라 :include 을 통해 열망 로딩을 할 필요한 경우 가 적절한 솔루션을하지 않은) find_by_sql에 의존 할 필요 없이, 임의의 숫자로 구성되는 테이블의 를 통해 연결을 할 수 있습니다.

+0

예, 가능합니다. 앱을 너무 심하게 둥지를 틀지 않도록 조심해야합니다. 나는 단계별로 보여주는 블로그 게시물을 썼다 : http://kconrails.com/2010/01/28/nesting-has_many-through-relationships-in-ruby-on-rails/ –

0

보십시오이 (레일 3) :

class LayerOne < ActiveRecord::Base 
    class << self 
    def layer_twos 
     LayerTwo.where(:layer_one_id => all.map(&:id)) 
    end 
    end 
end 
관련 문제