kikeda1104's blog

備忘録・技術に関することを書いています。(webエンジニア)

whereの指定方法

ActiveRecordを利用していて、どうやってwhereを書くのかわからないことがありますし

良く聞かれたりもしますので、書き方について、まとめておきます。

where

ActiveRecordの条件を記述する際に利用します。

model

# app/models/user.rb

class User < ApplicationRecord
end

Userを利用して書いていきます。

単一modelの条件の書き方

$ rails c 

admins = User.where(admin: true, name: 'hoge')
# admins = User.where("admin = 1 and name = 'hoge'") こちらも同じです。
p admins

複数modelの条件の書き方

modelを書き換えます。

class User < ApplicationRecord
  belongs_to :role
end

class Role < ApplicationRecord
  has_many :users
end
$ rails c

admins = User.joins(:role).where(role: { name: 'admin' })
p admins

ヒアドキュメントを利用する。

# admins = User.where("admin = 1 and name = 'hoge'")
admins = User.where(<<-SQL)
           admin = 1
           and name = 'hoge'
         SQL

参考

Active Record クエリインターフェイス | Rails ガイド

以上になります。