我实施以下三种模式。
# 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
我想获得带有“bars”和“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"
我尝试使用“包含”和“引用”。 但是,“包含”不接受“ON”的条件
(只接受表名......)
Foo
.includes(:bars)
.includes(:hoge)
.where(country: "japan")
.references(:bar)
.references(:hoge)
如何设置“开启”条件?
答案 0 :(得分: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)