🤖

RailsのActiveRecordで関連テーブルのカラムでwhere、またはorderする

2021/03/07に公開

はじめに

表題の通り、ActiveRecordで関連テーブルのカラムでwhereまたは、orderする方法について書いていきます。

前提

UserモデルとPostモデルが1:Nで関連づけられており、さらにPostモデルとCommentモデルが1:Nで関連づけられている場合を前提とします。
基本的な書き方は変わらないので、適宜ご自身の状況に置き換えてください。

コード

# eager_loadでPostsにCommentsをjoinする
posts = User.posts.eager_load(:comments)

# whereで絞り込み
posts.where('comments.body = ?', 'テスト')
# または
posts.where(comments: { body: 'テスト' })

# orderで並び替え
posts.order('comments.created_at desc')

説明

まずはwhereやorderで使用したい関連テーブルをjoinします。
その後、
where('関連テーブル名.カラム名 条件')、またはwhere(関連テーブル名: { カラム名: 条件 })
order('関連テーブル名.カラム名 desc or asc')
で絞り込み、または並び替えを行います。

おわりに

今回はActiveRecordの書き方のみを書きましたが、実際にどんなクエリが発行されているのかも意識しておくと良いかもしれません。

Discussion