2016-10-02 2 views
2

그래서 ActiveRecord가 이것을 어떻게 처리하는지 혼란스럽고 누군가가 나에게 약간의 통찰력을 줄 수 있기를 바랍니다.다형성 관계 혼동

다형성 관계가있는 테이블이 있습니다. 우리는 테이블 선택이라고 부를 것입니다. 거기에서 나는 정의 : 나는 두 가지 모델이

belongs_to :chooseable, polymorphic: true 

,의 한 영화와 다른 연극을 호출 할 수 있습니다. 거기에, 나는이 : has_many :choices as: chooseable, dependent: destroy 다형성 관계 모델에서

나는 두 개의 범위가 : 나는 users.choices.with_movies 말하는 경우

scope :with_movies, -> { 
    includes(:movies) 
     .where("chooseable_type": "Measure") 
    } 
    scope :with_shows, -> { 
    includes(:shows) 
     .where(shows: { hidden: false }) 
    } 

무엇, 나에게 혼란 것은,이다, 나는 떠나 조건이, AR 나를 balks가 표시된 chooseable_type 아웃 :

Unknown column 'choices.chooseable_type' in 'where clause': SELECT `movies`.* FROM `movies` WHERE `choices`.`chooseable_type` = 'Movie' AND `movies`.`id` IN (728) 

는하지만, 두 번째 범위 with_shows에, 나는 chooseable_type를 정의 할 필요가 없습니다 - 그것을 잘 작동합니다. 더 혼란스러운 것은 where 절을 제거하면 with_shows가 작동하지 않는다는 것입니다.

두 번째 범위의 where 절이 올바른 쿼리를 생성 할 수있는 이유를 이해하지 못한다.

답변

0

문제는 레일이 당신에 대한 결과 복잡한 쿼리를 구축하는 최선의 수행을 시도하는이며,이 쿼리에 대한 기본 테이블입니다 가장 가정,의에이

.where("chooseable_type": "Measure") 

을 해결합니다. 그것이 실패 명시 적으로 테이블 이름을 지정하지 도움말 : 다른 범위는 쇼 테이블 where 절을 가지고 있기 때문에 그래서

.where("movies.chooseable_type": "Measure") 
+0

는, 그것은하지 않더라도, 쇼 테이블에 chooseable_type 절을 적용 할 알고 명시 적으로 말해? 그게 나에게 이상해. – Siraris

+0

'puts with_shows.to_sql'을 실행하여 쿼리 작성을보십시오. – mudasobwa