【Rails】find/find_byメソッドを使って指定したレコードを取得する方法


find

findメソッドはテーブルの中からidを指定してモデルを取得したい場合に使います。

引数に渡せるのはidあるいは、idの配列。

# idが1のuserを取得
user = User.find(1)
 
# idが2と3のuserを取得
users = User.find [2, 3]


idを1つだけ指定した場合は戻り値はモデルオブジェクトであるのに対して、idを配列で渡した場合は戻り値は配列(モデルオブジェクトの配列)になります。

# idが1のuserを取得
user = User.find(1)
user.name
 
# idが2と3のuserを取得
users = User.find [2, 3]
users[0].name
users[1].name


指定したidのモデルが存在しなければArgumentError(例外)が投げられるので注意が必要です。



find_by

find_byメソッドは、条件を指定してモデルを1件だけ取得したい場合に使います。

# idが1のuserを1件取得
user = User.find_by(id: 1)
 
#nameが"taro"のuserを1件取得
user = User.find_by(name: "taro")
 
#nameが"taro"かつ、addressが"tokyo"のuserを1件取得
user = User.find_by(name: "taro", address: "tokyo")

find_byメソッドで取得できるのは1件のみです。もし条件に合うモデルが複数あった場合は最新の1件が取得されます。

指定したモデルが見つからない場合は戻り値はnilになります。