途中から erb を slim に変換する方法
最初は erb で開発してたけど、「やっぱりslim にしたい!」てなったとき。
Gemfileに以下を追記。
gem "slim-rails" gem "html2slim"
- slim-template/slim-rails: Slim templates generator for Rails 3, 4 and 5
- slim-template/html2slim: convert html files to slim
html2slim
はerbをslimに変換してくれるgem。
そして
bundle
(bundle install
と同じ意味)
既存のERBファイルを変換する。
# erbからslimへ変換 bundle exec erb2slim app/views/ --delete
これでview以下のerbファイルがslimに変わる。
deviseを使っていてログイン画面でエラーが出る場合
deviseを使っていて、以下のようなエラーが出る場合。
以下エラーメッセージ。
ActionView::SyntaxErrorInTemplate in Users::RegistrationsController#edit
Encountered a syntax error while rendering template: check - if resource.errors.any? #error_explanation h2 = I18n.t("errors.messages.not_saved", - count: resource.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 ')'
実際のファイルを見てみる。
app/views/devise/shared/_error_messages.html.slim
- if resource.errors.any? #error_explanation h2 = I18n.t("errors.messages.not_saved", - count: resource.errors.count, - resource: resource.class.model_name.human.downcase) ul - resource.errors.full_messages.each do |message| li = message
このエラーは、「I18n.t("errors.messages.not_saved",
のあと、改行して-
をつけてるけど、そんな書き方はできないよ」と言ってくれている。
よって、以下のように修正する。
- if resource.errors.any? #error_explanation h2 = I18n.t("errors.messages.not_saved", count: resource.errors.count, resource: resource.class.model_name.human.downcase) ul - resource.errors.full_messages.each do |message| li = message
これで解決するはず。
slimを読み込まない場合
単純に、gemをインストールしたのにサーバーを再起動してない可能性も。
bin/rails s
rails new したときから slim を使いたい場合
rails new
の後に以下を追記して、bundle
する。これで view ファイルを作る時は slim で生成される。
gem 'slim-rails'