ピスタチオを食べながらrailsを楽しむ

ピスタチオ大好きな著者のrailsを使ったツール作成の日記です。

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)