class Parent < ActiveRecord::Base
has_many :children
end
class Child < ActiveRecord::Base
belongs_to :parent
end
我想编写一个只返回父项只有一个孩子的查询。到目前为止我有这个......
parents = Parent.all
parents = parents.reject {|parent| parent.children.count > 1}
这是可行的,但我遇到的唯一问题是返回的数据类型是一个数组,而不是ActiveRecord :: Relation :: ActiveRecord_Relation_Parent数据类型。我正在使用一个错误的gem(Kaminari pagination gem),因为它需要一个Active Record关系数据类型而不是一个数组。
有谁知道如何使用ActiveRecord返回所有只有一个孩子的父母而不是使用ruby代码执行此操作?
parents = Parent.joins(:children).code_here_to_query_for_parents_with_only_one_child?
答案 0 :(得分:1)
Parent.joins(:children).group('parents.id').having('count("children.parent_id") = 1')
编辑:嗯,看起来如果我链接任何“WHERE”SQL命令它会破坏查询= /
Edit2:这就是我最终做的事情:
parents = Parent.all #I have a bunch of chained WHERE clauses if parameters are present above
parents = parents.joins(:children).where("parents.id IN (?)",Parent.joins(:children).group("parents.id").having('count("children.parent_id") = 1')) if params[:single_child].present?