0

감안할 때 예를 들어 모델 with_role rolify으로 이상한 행동을한다 그러나액티브 병합이 같은

records = Foo.joins(bar: { baz: :qux }).merge(Qux.where(x: 17)) 

records = Foo.joins(bar: { baz: :qux }).merge(Qux.with_role(:admin)) 

은의 수집을 반환의 값으로 채워진 레코드는 Foo입니다.테이블. 즉, 을 의미합니다. 여기서 zfoos에 있지만 quxxes에없는 열은 누락 된 속성 오류를 제공합니다. 당신은 거의으로이 문제를 해결할 수 있습니다

records = Foo.select('foos.*').joins(bar: { baz: :qux }).merge(Qux.with_role(:admin)) 

그러나 그렇지 foos에서 quxxes에 열에서 값을 하겠지만 이것은기만하는 전형적인의 예 id, created_at를 들어, 같은 이름이 열 및 updated_at 레일 응용 프로그램은 quxxes에서 올 것입니다.

+0

질문을 이해하지 못했습니다. 너 뭐하려고? – Surya

+0

또한 'has_many' 또는'has_one' 연관은 어디에 있습니까? – nikkon226

+0

@ User089247 rolify를 사용하여 관리 역할과 연관된 qux에 속하는 baz에 속하는 막대에 속한 모든 foo 레코드에 대한 쿼리를 시도하고 있습니다. – olleicua

답변

0

따라서 문제는 rolify가 의 행 233에있는 with_role 관계에 선택을 추가하는 것으로 나타납니다.

선택 문 (라인 249 this file 69 참조) 방법 ActiveRecord 저장에보고 후, 우리는 다음과 같은 솔루션을 내놓았다 :이 병합에 의해 추가 된 선택을 제거하고 그것을 대체

records = Foo.joins(bar: { baz: :qux }).merge(Qux.with_role(:admin)).tap { |rel| rel.select_values = ['foos.*'] } 

우리 개인적인. 또는 선택 항목을 호출 체인의 끝으로 옮길 수도 있습니다.

records = Foo.joins(bar: { baz: :qux }).merge(Qux.with_role(:admin)).select('foos.*')