Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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:マイナーな石だと、有りがちな話なのです