Rails라는 Rails는 결합 된 _scopes입니다
-
03-07-2019 - |
문제
나는 결합을 사용하는 이름의 _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' "
}
제휴하지 않습니다 StackOverflow