ActiveRecord4(Rails4)でレコードを1件だけ取得する方法

ActiveRecord4(Rails4)でレコードを1件だけ取得する方法メモ。



ActiveRecord4(Rails4)でレコードを1件だけ取得する方法


Rails4で追加されたfind_byを使えばOKです。find_byはレコードが存在しなかった時nilを返します。


# 1件だけ取得。レコードがないとnilが返る
Model.find_by(first_name: 'name', last_name: 'name')


レコードを1件だけ取得するその他の方法


findもレコードを1件だけ取得するのは同じですが、findはidしか指定できない上、レコード取得に失敗すると例外が発生します。


# 1件だけ取得。レコードがないと例外が起きる
Model.find(id: 1)

whereとfirstを使うことで1件だけ取得することもできますが、find_byに比べると面倒な書き方です。(SQLはfirstのタイミングで実行されます)


# 複数件取得。レコードがない場合は空の配列が返る
models = Model.where(name: 'name')

# 先頭の要素を取得。modelsが空だった場合はnilが返る
models.first

ちなみに、find_by_nameのような動的なファインダーはRails4以降では非推奨になったようです。


# 1件だけ取得。レコードがないとnilが返る。Rails4以降非推奨
Model.find_by_name('name')


参考リンク


[Rails][翻訳]Rails で十分に活用されていなくてもったいない ActiveRecord::Relation のメソッド TOP 10


著者プロフィール
Webサイトをいくつか作っています。
著者プロフィール