KonifarPod

[Rails] ActionView::Template::Error (undefined method `html_safe’ for nil:NilClass) が出た時の原因

   

Pocket

railsプロジェクトで開発している時

ActionView::Template::Error (undefined method `html_safe’ for nil:NilClass)

というエラーが出てハマったので備忘を残しておこうと思います。結論からいうと、viewテンプレートの中でrubyのコードを記述する時、nilを返してはいけない という何ともしょっぱいことであります。

html_safeを記述していないのにこのエラーが出る場合、ほぼ間違いなくview内のrubyコードでnilを返しています。僕がハマったのは、下記のようなhamlです。

#hoge
  - @users.each_with_index do |user, index|
    - return if index == 30
      = user.name

 

パッと見特に問題なさそうに見えますが、returnしている部分が原因で500エラーになってしまいます。

viewの中のrubyのコードは、返り値が自動的にhtml_safeされるので、returnしてしまうと nil からhtml_safeを呼ぼうとして

ActionView::Template::Error (undefined method `html_safe’ for nil:NilClass)

が発生してしまうからです。

上記コードの場合、開発環境だとuserのデータが30件もなかったのでreturnされることなくエラーは出ず、デプロイして本番相当データで動かしてみて初めて発覚したため原因の判明に時間がかかりました。returnではなく、breakにしたらあっさり動いたんですけども。

html_safeを書いていないのにこのエラーが出た時は、viewのrubyコードを見なおしてみるといいかもしれません。

Pocket

 - Develop