paramsでfindするときの簡単な書き方
# めんどい(´・ω・`) @user = User.find(params[:user_id]) if params[:user_id].present? # ① # カンタン(`・ω・´) @user = User.find_by_id(params[:user_id].presence) # ②
- find(id)とfind_by_id(id)の違いは、レコードが見つからなかったときに前者がRecordNotFound例外を出すけど、後者はnilを返すだけというところ
- params[:user_id].presenceは、params[:user_id]が存在すればそれを返して、存在しなければnilを返す。if文を書かなくて済むので便利。(`・ω・´)
追記(7/9)
上記の方法だと、params[:user_id].presenceがnilでもSQLを実行してしまいます。これは余計なSQLなので、こんな感じでどうでしょ?ご指摘いただきありがとうございます。
@user = params[:user_id].presence && User.find_by_id(params[:user_id]) # ③
params[:user_id]が存在しないとき、①の@userは未定義で、③の@userはnilとなります。また、③だとSQLが実行されません。でも、長いからなぁ…。