hashをtryする
tryメソッドは例外を発生させずにメソッドを実行できるメソッド(たぶん。認識に齟齬があればご指摘頂けると嬉しいです!)。
returnが存在すればそれを、存在しない場合にはnilを返してくれるので例外が発生せず、色んな場面で使える。
e.g.
@person.try(:name) #=>@personでnameが返ればそれを、nameが返らなければnilを返してくれる。
tryについて詳しくはこんな感じ。
http://api.rubyonrails.org/classes/Object.html#method-i-try
今回はhashに対してtryを使いたかった。
e.g.
params[:books][:tags][:english]
booksにhash形式でネストされたtagsのさらにネスト先にenglishがいるか調べたい。
ただ、これをそのまま書けば[:english]がいない場合にエラーを吐いてしまう。
だからといって安直にparams[:books][:tags].try(:english)
と書くとこれもダメ。
結論から書くとこの場合には下記のようにすればtryしてくれる。
params[:books][:tags].try(:[], :english)