使用 Rails 包括对儿童的条件

you*_*786 5 ruby-on-rails rails-activerecord

我有一个Parent有很多孩子的模型Child。我想获得所有父模型并显示每个父模型Childincludes据我所知,这是 Rails方法的经典用例。

但是,我无法让 Rails 在不将父模型限制为有子模型的情况下向子模型添加条件。

例如,这仅输出有孩子的父母:

Parent.includes(:children).where(children: {age: 10}).each do |parent|
  # output parent info
  parent.children.where("age = 10").each do |child|
   #output child info
  end
end
Run Code Online (Sandbox Code Playgroud)

我已经查看了Rails 包含条件,但似乎我遇到了与问题的 OP 相同的问题,并且接受的答案的任何部分都不能解决它(它要么只有一些父项,要么求助于多个查询) .

Aru*_*hit 5

您需要使用LEFT JOIN.

Parent.joins("LEFT JOIN children ON parent.id = children.parent_id")
      .where("parent.age = 10 AND children.age = 10")
      .select("parent.*, children.*")
Run Code Online (Sandbox Code Playgroud)

如果要从parent表中选择表中可能有也可能没有相应行的行children,请使用该LEFT JOIN子句。如果children表中没有匹配的行,则表中列childrenNULL值将替换为这些值。