如何用“包含”设置“开启”条件

时间:2016-06-13 09:10:52

标签: ruby-on-rails postgresql

我实施以下三种模式。

# 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)

如何设置“开启”条件?

1 个答案:

答案 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)