Rails / アソシエーションした先のデータを持っていないレコードを検索する

Shunsuke Sawada

タイトルがすごい分かりづらい。。。

User has_many Blogs
のようになっている時、Blogを持っていないUserを検索したい。

ruby
1
@users = User.includes(:blogs).where( :blogs => { :id => nil } )

  
ちなみにtechというカテゴリーのブログをもつUserを検索するのは、こんな感じ。

ruby
1
@users = User.includes(:blogs).where( :blogs => { :category => 'tech' } )

  
こちらがドンピシャです。
Want to find records with no associated records in Rails 3

includesについてはこちらが参考になりました。
似ているようで全然違う!?Activerecordにおけるincludesとjoinsの振る舞いまとめ - Qiita
  
以上。

Shunsuke Sawada

おすすめの記事

acts-as-taggable-on タグを表示させる順番を決めたい
Railsを4.2にバージョンアップしたら、Vagrantのローカル開発環境にアクセスできなくなった問題
Railsのバリデーションエラー後にレイアウトが崩れるとき