2016-06-13 3 views
0

다음 세 가지 모델을 구현합니다."포함"으로 "켜기"상태를 설정하는 방법

# app/model/foo.rb 
class Foo < ActiveRecord::Base 
    belongs_to :hoge 
    has_many :bars 
end 

# app/model/hoge.rb 
class Hoge < ActiveRecord::Base 
    has_one :foo 
end 

# app/model/bar.rb 
class Bar < ActiveRecord::Base 
    belongs_to :foo 
end 

"bar"및 "hoge"가 포함 된 "foo"레코드를 받고 싶습니다. 또한, 다음과 같이 "LEFT OUTER JOIN"의 "ON"조건을 설정해야합니다.

SELECT * 
FROM foos 
LEFT OUTER JOIN bars ON bars.foo_id = foo.id 
LEFT OUTER JOIN hoges ON hoges.id = foo.hoge_id AND (foo.name = "name") 
where foo.country = "japan" 

"포함"및 "참조"를 사용해 보았습니다. 는하지만, (... 동의 전용 테이블 이름) I가 "ON"의 조건을 설정하는 방법

Foo 
    .includes(:bars) 
    .includes(:hoge) 
    .where(country: "japan") 
    .references(:bar) 
    .references(:hoge) 

"ON"의 condtion를 허용하지 않습니다 "포함"?

답변

0

사용 joins 방법은 열망 부하에 레코드를 조건 includes에 가입 사용자 정의, 여기에 문서 링크 http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html#method-i-joins

Foo. 
    joins(:bars). 
    joins("LEFT JOIN hoges h ON h.id = foos.hoge_id AND (foos.name = 'name')"). 
    where(country: "japan"). 
    includes(:bars). 
    includes(:hoge) 
+0

당신을 감사합니다! 나는 그것을 시험해 본다. – tamagohan2

+0

시도했지만이 쿼리가 제대로 작동하지 않습니다. "includes"를 사용하면 "references"를 사용해야합니다. 하지만 "조인"이 "참조"와 함께 사용되면 "참조"가 제대로 작동하지 않습니다 ... (열심히로드가 작동하지 않습니다) ... – tamagohan2

+0

@ user4252489 나는 최신 레일 (active_record)을 사용하고 있다고 가정합니까? 실제로 나는 새로운 레일스 코드베이스를 사용하여 db 스키마를 테스트했으며 작동했습니다. –

관련 문제