0

次のようなUserというモデルがある場合:

  has_many     :parent_relationships,
               :class_name            => "Relationship",
               :foreign_key           => :child_id,
               :dependent             => :destroy,
               :uniq => true
  has_many     :parents,
               :through               => :parent_relationships,
               :source                => :parent

そのため、少なくとも1人の親を持つユーザーを見つけられるようにしたいと思います。現在、特定のユーザーを取得して取得するとuser.parents、親のリストが取得されますが、where句でそれを行うにはどうすればよいですか?

私の懸念は、今私がこのようにフェッチしているということです:

User.where({:role => 'Teen'})

ですから、私は、役割がティーンであり、少なくとも親を持っているすべてのユーザーを見つけたいと思います。また、さらに複雑にするために、考慮したい別の関連付けがあります。

 has_and_belongs_to_many :notifications

そして、名前属性が「email」であるという通知を持っているユーザーを見つけたいと思います。

ありがとう

4

1 に答える 1

0

参加する必要があります:

User.joins(:parents).uniq

これにより、が作成されるためINNER JOIN、親を持つレコードのみが返されます。はuniq、結合によって返される可能性のある重複レコードを削除します。

編集

メソッドチェーンは次のように機能します。

User.includes(:notifications).joins(:parents).where(:role => "Teen").where("notifications.name = 'email'")
于 2012-11-25T21:08:54.150 に答える