Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

slimで存在しても居ない行に"syntax error"とかが出た場合、if-elseの構文をif-unlessに直すとうまくいく事がある

今回はどうも泥臭い話です。
もしかすると、将来勝手に解決されてるかもしれません。

erbからslimにしたviewのとある機能について検証していたところ、こんなエラーがでました。

ERROR: compiling _app_views_hoges_search_html_slim__ RAISED /home/shuzo/rails/app/views/hoges/search.html.slim:41: syntax error, unexpected keyword_ensure, expecting end-of-input

該当箇所をみても、そんなモノはでていない。
大体、エラーが41行目とか言ってるがslimファイルは40行しかない。
一体どうなっているのでしょう??
……結論を言うと、「コンバータのif-elseのネスト化が想定通りいっていない」事が原因でした。

実際のところ

当該エラーを引きおこしたのは、以下のような構造の部分です。

- if(@hoge.blank?)
   |  該当なし 
- else
   | 該当あり

色々調べたところ、どうもelseがイマイチ上手く動いていないようです。
暫定処置としてunlessで条件を書く方向に変更します。

- if(@hoge.blank?)
   |  該当なし 
- unless(@hoge.blank?)
   | 該当あり

どうも格好悪い気がしますが、ロジック上の矛盾を発生することなくエラーを潰すことができました。

昔、組み込み業界で働いていたときに「case文だと駄目だがif-elseで書き直すと動いた」という
コンパイラエラー*1の話があったのを思い出しました。

*1:マイナーな石だと、有りがちな話なのです