문제

나는 결합을 사용하는 이름의 _scope를 만들려고하지만 생성 된 SQL이 옳게 보이지만 결과는 쓰레기입니다. 예를 들어:

class Clip < ActiveRecord::Base      
  named_scope :visible, {
    :joins => "INNER JOIN series ON series.id = clips.owner_id INNER JOIN shows on shows.id = series.show_id", 
    :conditions=>"shows.visible = 1 AND clips.owner_type = 'Series' "
  }

(클립은 시리즈가 소유하고 시리즈는 쇼에 속하며 쇼는 보이거나 보이지 않을 수 있습니다).

클립. 모두 :

SELECT * FROM `clips` 

clip.visible.all does :

SELECT * FROM `clips` INNER JOIN series ON series.id = clips.owner_id INNER JOIN shows on shows.id = series.show_id WHERE (shows.visible = 1 AND clips.owner_type = 'Series' ) 

이것은 괜찮아 보입니다. 그러나 결과 클립 모델 배열에는 데이터베이스에없는 ID가있는 클립이 포함되어 있습니다. 대신 쇼 ID를 선택합니다. 내가 어디로 잘못 가고 있습니까?

도움이 되었습니까?

해결책

문제는 "선택 *" - 쿼리가 클립, 시리즈 및 쇼에서 모든 열을 순서대로 선택한다는 것입니다. 각 테이블에는 ID 열이 있으므로 결과의 명명 된 열 사이에 충돌이 발생합니다. 마지막 ID 열은 (쇼에서) 철회 된 열이 원하는 열을 무시합니다. 다음을 사용해야합니다 : : joins, like : :

named_scope :visible, {
  :select => "episodes.*",
  :joins => "INNER JOIN series ON series.id = clips.owner_id INNER JOIN shows on shows.id = series.show_id", 
  :conditions=>"shows.visible = 1 AND clips.owner_type = 'Series' "
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top