6

Railsは初めてです。subject_idが見つからない場合にnilを返すより良いアプローチはどれか疑問に思っています:

@subject = Subject.find_by_id(params[:subject_id])

また

@subject = Subject.where(:id => params[:subject_id]).first

ありがとう。

4

2 に答える 2

9

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.
于 2012-06-26T00:51:17.003 に答える
4

どちらも同じ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番目の形式を提案する必要があります。

于 2012-06-26T00:03:07.203 に答える