1
class Parent < ActiveRecord::Base
  has_many :children
end

class Child < ActiveRecord::Base
  belongs_to :parent
end

ちょうど 1 人の子を持つ親のみを返すクエリを作成したいと考えています。私はこれまでのところ...

parents = Parent.all
parents = parents.reject {|parent| parent.children.count > 1}

これは機能しますが、私が遭遇している唯一の問題は、返されるデータ型が ActiveRecord::Relation::ActiveRecord_Relation_Parent データ型ではなく配列であることです。配列ではなく Active Record リレーション データ型を想定しているため、エラーが発生している gem (Kaminari pagination gem) を使用しています。

Rubyコードでこれを行うのではなく、ActiveRecordを使用して子が1人だけのすべての親を返す方法を知っている人はいますか?

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 に答える