【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になります。