カテゴリー:
Rails
タグ:
 Rails Rails4 find exist find_by

このエントリーをはてなブックマークに追加
更新日時:
2014年01月15日(水)
作成日時:
2014年01月15日(水)

前の記事 / 次の記事

まとめとか言って中途半端だけど、簡単に。

参考:ActiveRecord::FinderMethods

index

  1. find
  2. find_by
  3. find_by!
  4. exists?

1.find

特定のIDのレコードを1つ探す

Article.find(1)
Article.find("1")
# returns the object for ID = 1

複数の値を渡すこともできる

Article.find(1,3,5,7)
Article.find([1, 3, 5, 7])
# returns an array for objects with IDs in (1, 3, 5, 7)

2.find_by

指定したカラムが特定の値を持つレコードを1つ探す。

Article.find_by(category_id: 1)

複数のカラムにまたがってもいい

Article.find_by(category_id: 1, author_id: 2)

条件も指定できる

Article.find_by "created_at < ?", 2.weeks.ago

何もヒットしなければ nil になる

Aarticle.find_by "id < 0"
# returns nil

3.find_by!

findを使った場合は何もヒットしなければActiveRecord::RecordNotFoundがraiseされるけど、
find_byを使った場合、何もヒットしなくても例外はraiseされない(nilになる)。

find_byを使った場合でもActiveRecord::RecordNotFoundをraiseさせたい場合は、
find_by!を使う。

何もヒットしなければActiveRecord::RecordNotFoundがraiseされる。

Aarticle.find_by "id < 0"
# ActiveRecord::RecordNotFound

4.exists?

レコードがあるかないかを判定する。
あれば true なければ false を返す。

Article.exists?(1)

特定のカラムを検索できるし、複数のカラムにまたがってもいい

Article.exists?(category_id: 1)
Article.exists?(category_id: 1, author_id: 2)

条件でも検索できる

Article.exists "created_at < ?", 2.weeks.ago