最近お世話になったRubyのメソッド

今まで↓のように書いてたんです。

if params[:q].nil?
  p = params[:q][:id]
end

params[:q]があれば、pにparams[:q][:id]を代入してほしいなと。
何でこう書いてるかというと、params[:q]がnilの場合、params[:q][:id]がエラーになるんですね。

「undefined method `[]’ for nil:NilClass」

なので、nil?で確かめてから、params[:q][:id]を実行してます。

でも、たったこれだけのことに3行も使うのはなあと思って、以下のように書き換えてみました。

 p = params[:q][:id] if params[:q].nil?

1行になったけど、何か綺麗ではない。params[:q]を2回も書いてる。。

そこで、いろいろとググってたのですが、ついに便利なメソッドを見つけました。
tryです。
tryを使うとこう書けました。

 p = params[:q].try(:[], :id) 

tryの第1引数はメソッド名で、第2引数は第1引数に書いたメソッドに対する引数。
レシーバがnilじゃなかったら、メソッドを実行するというメソッドのようです!

全く”ナイストライ”なメソッドですね。

参考URL:http://blog.livedoor.jp/sasata299/archives/51718602.html