こんにちは。たなか(@tanaka_ricecake)です。
Ruby on RailsでWebアプリケーションサービスの開発をしています。
今回もHamlシリーズです。何気なく作業していたら以下のようなエラーに遭遇したので、内容と解決方法をご紹介します。
もくじ
症状
ActionView Template::Error (Got “elsif” with no preceding “if”)
ビューのところで以下のようなエラーが出てしましました。
Completed 500 Internal Server Error in 222ms (ActiveRecord: 2.9ms)
ActionView::Template::Error (Got "elsif" with no preceding "if"):
elsifの前にifをつけろみたいなことを仰っています。ついてるじゃん!
該当のソースはこんな感じ。
-# 管理者の場合
- if current_user.admin?
= user_select
-# スタッフの場合
- elsif current_user.staff?
= f.select :user_id, current_user_groups
-# その他
- else
= f.hidden_field :user_id, value: 1
えー、特におかしいところとかなさそうに見えますけどー….。
解決方法
コメントのインデントを下げろ!
以下のように変更したらエラーが解消されました。
-# 管理者の場合
- if current_user.admin?
= user_select
-# スタッフの場合
- elsif current_user.staff?
= f.select :user_id, current_user_groups
-# その他
- else
= f.hidden_field :user_id, value: 1
-# を付与したコメント箇所が、elsifの内側にインデントされていなかったためにご立腹だったようです。
つい条件式のすぐ上に書きたくなってしまいますが、Haml的にはダメな書き方みたい。
まとめ
インデントで入れ子を管理しているHamlならではのエラーでした。
つまらないことで止まっちゃいましたね。
Haml触り始めて3ヶ月、まだ嫌いです。
短いですが、今回はここまで。