Railsは初めてです。subject_idが見つからない場合にnilを返すより良いアプローチはどれか疑問に思っています:
@subject = Subject.find_by_id(params[:subject_id])
また
@subject = Subject.where(:id => params[:subject_id]).first
ありがとう。
Railsは初めてです。subject_idが見つからない場合にnilを返すより良いアプローチはどれか疑問に思っています:
@subject = Subject.find_by_id(params[:subject_id])
また
@subject = Subject.where(:id => params[:subject_id]).first
ありがとう。
find_by
名前がわかりやすく、2番目の関数(つまりfirst
)を呼び出さなくてもオブジェクトを取得できるので、私は好みます
User.find(9) # returns User object. Throws exception when not found.
User.find_by(id: 9) # returns User object. Returns nil when not found.
User.where(id: 9).first # returns User object. Returns nil when not found.
どちらも同じSQLステートメントを生成します。
1.9.3p194 :003 > Example.find_by_id(9)
Example Load (0.3ms) SELECT "examples".* FROM "examples" WHERE "examples"."id" = 9 LIMIT 1
nil
1.9.3p194 :004 > Example.where(:id => 9).first
Example Load (0.3ms) SELECT "examples".* FROM "examples" WHERE "examples"."id" = 9 LIMIT 1
nil
したがって、データベースで同じパフォーマンス特性を持ちます。とのRailsコードにはわずかな違いがあるかもしれませんが、find_by_*_
クエリwhere
時間と比較すると無視できると思います。
編集:以下のRyan Biggのコメントに照らして、上位互換性のために2番目の形式を提案する必要があります。