1
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 分页 gem),因为它需要一个 Active Record 关系数据类型而不是一个数组。

有谁知道我如何使用 ActiveRecord 而不是使用 ruby​​ 代码返回所有只有一个孩子的父母?

parents = Parent.joins(:children).code_here_to_query_for_parents_with_only_one_child?
4

1 回答 1

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?
于 2013-11-13T17:03:47.600 回答