在ActiveRecord中只返回所有只有一个孩子的父母?

时间:2013-11-13 16:49:36

标签: ruby-on-rails activerecord

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?

1 个答案:

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