Railsで子モデルのレコードが、あるか、ないか、で抽出仕分ける方法

Class User < ActiveRecord::Base
has_one :child
end
Class Child < ActiveRecord::Base
belongs_to :user
end
例えば上記のような関係だったとして、
childモデルのレコードが存在しているusersレコード全て、
childモデルのレコードが存在していないusersレコード全て、
を抽出する方法を教えて下さい。
よろしくお願いします。

回答の条件
  • 1人20回まで
  • 13歳以上
  • 登録:2014/12/17 23:05:51
  • 終了:2014/12/24 23:10:03
id:chucker34

childモデルが存在している場合、childモデルは引っ張ってこなくてだいじょぶです。抽出するのはuserモデルだけでお願いします。

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4546ベストアンサー獲得回数18962014/12/18 11:59:56

ポイント100pt

こんなページがありました。
http://qiita.com/abey1192/items/198f3c15d14392023a63
http://labs.timedia.co.jp/2013/10/activerecord4sql-arel.html


User の id と、Child の user_id が紐づいているとして、こんな感じになるのじゃないかと思います。

user_table  = User.arel_table
child_table = Child.arel_table
condition = child_table[:user_id].eq(user_table[:id])

users__has_child = User.where(UserGroup.where(condition).exists).all
users__no_child  = User.where(UserGroup.where(condition).exists.not).all
id:chucker34

ありがとうございました。一旦下記のような感じで一部SQLで自己解決していましたが、そちらも試してみます。

'''
User.joins('LEFT JOIN childs ON users.id = childs.user_id').where('childs.id IS NULL')
'''

2014/12/24 23:37:30

その他の回答(0件)

id:chucker34

質問文を編集しました。詳細はこちら

id:a-kuma3 No.1

a-kuma3回答回数4546ベストアンサー獲得回数18962014/12/18 11:59:56ここでベストアンサー

ポイント100pt

こんなページがありました。
http://qiita.com/abey1192/items/198f3c15d14392023a63
http://labs.timedia.co.jp/2013/10/activerecord4sql-arel.html


User の id と、Child の user_id が紐づいているとして、こんな感じになるのじゃないかと思います。

user_table  = User.arel_table
child_table = Child.arel_table
condition = child_table[:user_id].eq(user_table[:id])

users__has_child = User.where(UserGroup.where(condition).exists).all
users__no_child  = User.where(UserGroup.where(condition).exists.not).all
id:chucker34

ありがとうございました。一旦下記のような感じで一部SQLで自己解決していましたが、そちらも試してみます。

'''
User.joins('LEFT JOIN childs ON users.id = childs.user_id').where('childs.id IS NULL')
'''

2014/12/24 23:37:30

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません