2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】devise で作成されたerbファイルを slim に変換した時に発生したエラー

Posted at

概要

devise のビューファイルを gem 'erb2slim' で erb → slim に変換した時に躓いた内容についてまとめる。

前提

  • 以下は開発環境に導入済みであること
    • devise
    • slim
    • erb2slim

発生したエラー

Terminal
$ bundle exec erb2slim app/views/devise app/views/devise

実行後にアプリを開いて問題ないか確認

Terminal
$ rails s
ログイン画面にアクセス時のエラー
ActionView::SyntaxErrorInTemplate:
        Encountered a syntax error while rendering template: check - if object.errors.any?
          #error_explanation
            h2
              = I18n.t("errors.messages.not_saved",
              -                  count: object.errors.count,
              -                  resource: resource.class.model_name.human.downcase)
            ul
              - resource.errors.full_messages.each do |message|
                li
                  = message
      # ./app/views/devise/shared/_error_messages.html.slim:5: syntax error, unexpected ':', expecting ')'
      # -                  count: object.errors.count,
      #                         ^
      # ./app/views/devise/shared/_error_messages.html.slim:6: syntax error, unexpected unary-, expecting '='
      # -                  resource: r...
      # ^
      # ./app/views/devise/shared/_error_messages.html.slim:6: syntax error, unexpected ')', expecting end
      # ..._name.human.downcase)))).to_s)); 
      # ...                              ^
      # ./app/views/devise/shared/_error_messages.html.slim:5: syntax error, unexpected ':', expecting ')'
      # -                  count: object.errors.count,
      #                         ^
      # ./app/views/devise/shared/_error_messages.html.slim:6: syntax error, unexpected unary-, expecting '='
      # -                  resource: r...
      # ^
      # ./app/views/devise/shared/_error_messages.html.slim:6: syntax error, unexpected ')', expecting end
      # ..._name.human.downcase)))).to_s)); 
      # ...              

解決策

h2 タグ内の '-' を削除

app/views/devise/shared/_error_massages.html.slim(変更前)
- if object.errors.any?
  #error_explanation
    h2
      = I18n.t("errors.messages.not_saved",
      -                  count: object.errors.count,
      -                  resource: resource.class.model_name.human.downcase)
    ul
      - resource.errors.full_messages.each do |message|
        li
          = message
app/views/devise/shared/_error_massages.html.slim(変更後)
- if object.errors.any?
  #error_explanation
    h2
      = I18n.t("errors.messages.not_saved",
                        count: object.errors.count,
                        resource: resource.class.model_name.human.downcase)
    ul
      - resource.errors.full_messages.each do |message|
        li
          = message

erb2slim 導入準備から変換後の間に行った内容

1: 変換前に devise ビューファイルをバックアップ

以下 a,b どちらかでバックアップをとる。
変換で不具合が起きて断念しても後で戻せるようにするため。

a : git の機能を利用する方法
  • この時点で commit しておく

eg)

Terminal
$ git add . 
$ git commit -m "Backup devise view files"
b : ディレクトリ(app/views/devise)を丸ごとコピー
Terminal
username:~/environment/app-name
$ cp -r app/views/devise app/views/backup-devise-view

2 : erb2slim を実行

Terminal
$ bundle exec erb2slim app/views/devise app/views/devise -d

-d オプションによって変換元のerbファイルは削除されるが、 1でバックアップを取れていれば戻せる。

実行後
ActionView::SyntaxErrorInTemplate:
        Encountered a syntax error while rendering template: check - if object.errors.any?
          #error_explanation
            h2
              = I18n.t("errors.messages.not_saved",
              -                  count: object.errors.count,
              -                  resource: resource.class.model_name.human.downcase)
            ul
              - resource.errors.full_messages.each do |message|
                li
                  = message
      # ./app/views/devise/shared/_error_messages.html.slim:5: syntax error, unexpected ':', expecting ')'
      # -                  count: object.errors.count,
      #                         ^
      # ./app/views/devise/shared/_error_messages.html.slim:6: syntax error, unexpected unary-, expecting '='
      # -                  resource: r...
      # ^
      # ./app/views/devise/shared/_error_messages.html.slim:6: syntax error, unexpected ')', expecting end
      # ..._name.human.downcase)))).to_s)); 
      # ...                              ^
      # ./app/views/devise/shared/_error_messages.html.slim:5: syntax error, unexpected ':', expecting ')'
      # -                  count: object.errors.count,
      #                         ^
      # ./app/views/devise/shared/_error_messages.html.slim:6: syntax error, unexpected unary-, expecting '='
      # -                  resource: r...
      # ^
      # ./app/views/devise/shared/_error_messages.html.slim:6: syntax error, unexpected ')', expecting end
      # ..._name.human.downcase)))).to_s)); 
      # ...              

背景・原因など

  • 変換後 slim の構文の誤り

ダッシュは制御コードを意味します。...(省略)...複数行にわたる Ruby のコードが...(省略)...行末がカンマ , で終わる場合 (例 関数呼び出し) には, 行末にバックスラッシュを追加する必要はありません。slim/README.jp.md at master · slim-template/slim

うまくいかなくて元に戻したいとき

"実行コマンド・発生したエラー内容" 1 でとった方法により実行する内容が異なる

  • 1-a の場合 (git)
Terminal
$ git checkout . #変更した内容を取消
$ git ls-files -z -o --exclude-standard | xargs -0 rm -rf #untracked の 追加ファイル・ディレクトリ を削除

二行目は難しいコマンドなのですが、以下のURLを参考にさせていただきました。
Git: untrackedの追加ファイルやディレクトリを「安全に」削除する方法|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社

  • 1-b の場合

変換済みのslimファイルが入ったディレクトリを削除

バックアップしたディレクトリをリネームする

Terminal
$ rm -rf -i app/views/devise
$ mv app/views/backup-devise-view app/views/devise 

参考URL

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?