我正在尝试创建一个ActiveRecord查询来检索他们的第一个孩子具有特定属性的所有父记录。
Parent has_many children
Child has_one parent
基本上我正在尝试:
Parent.includes(:children).where('child.first.property = ?', 'something')
我怎样才能达到这样的目标?
答案 0 :(得分:1)
在代码中执行这些检查可能更容易,并且稍后会担心优化。
Parent.select { |p| p.children.order("created_at asc").first.property == "something" }
这将最终为每个父母加载第一个孩子。另一种选择是首先与具有该属性的孩子一起加入以缩小父母的范围,然后再执行相同的检查。
Parent.joins(:children).where(:property => "something").group("parents.id").select { |p| p.children.order("created_at asc").first.property == "something" }