u16suzuの blog

u16suzu のブログです。

2016/7/28(木)の日記

jbuilderについて

extract! # activerecord objectのアトリビュートを指定して書き出し
ignore_nil! # このメソッドを書いた後は, nil のkey-valueをjsonに書き出さない. ignore_nil! false でオフにできる.

Splat演算子

a, b = *[1,2] # => a = 1, b = 2
*c = 1,2,3 # => c = [1,2,3]

Rubyで、配列を展開するときに使う *array みたいな演算子 * を Splat演算子と呼ぶ.

上の動作は知っていたけど、下の動作は気づいていなかった.

展開後の値を代入で指定しているわけですね.

メソッドの引数にハッシュを指定するときのつまづきポイント

[42] pry(main)> fuga a: 123
=> {:a=>123}
[43] pry(main)> fuga {a: 123}
SyntaxError: unexpected ':', expecting '}'
fuga {a: 123}
[43] pry(main)> fuga( {a: 123})
=> {:a=>123}

メソッドの引数にハッシュを指定したいときに, fuga {a: 123} と書くとエラーになる。

これは、Rubyが引数の { をブロック引数の { として解釈してしまうため発生する。

fuga({a: 123})()明示的に引数指定をすればエラーにならない

はじめ、Splat演算子と関係あるのかなと思ったけど、関係なかった。

今回、仕事で久しぶりに遭遇して、同僚のA氏に昔教えていただいたことを思い出した。

テスト周りで久しぶりにハマった

BaseController の rescue_from で例外の出力処理を書いていなかったため

テストは落ちるけど、スタックトレースが出力されず、原因の特定に困った。

いわゆる例外の握りつぶしに意図せずになってしまっていた。

これから rescue_fromStandardError を補足する場合は注意したい。