質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

1493閲覧

undefined local variable or method `type' for #<#のエラーについて

messy1019

総合スコア18

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2018/08/10 06:54

編集2018/08/10 08:04

アプリケーション全体のviewファイルをhaml化している途中なのですが、テーマのエラーが発生してしまいました。

現在のコード
●application.html.haml

- unless flash.empty? :javascript <haml_silent> flash.each do |f| </haml_silent><haml_block><haml_silent> type = f[0].to_s.gsub(&#39;alert&#39;,&#39;error&#39;).gsub(&#39;notice&#39;,&#39;info&#39;) </haml_silent> toastr['#{type}']('#{f[1]}'); </haml_block>

問題の箇所は下記です。
type = f[0].to_s.gsub('alert','error').gsub('notice','info')
</haml_silent> toastr'#{type}';

エラー画像添付
イメージ説明

元のコード
●application.html.erb

<% unless flash.empty? %> <script type="text/javascript"> <% flash.each do |f| %> <% type = f[0].to_s.gsub('alert','error').gsub('notice','info') %> toastr['<%= type %>']('<%= f[1] %>'); <% end %> </script> <% end %>

どこをどのように修正すれば良いか、お分かりになる方がいらっしゃいましたら教えて頂けますでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

↓こうすると、

haml

1- unless flash.empty? 2 %script{:type => 'text/javascript'} 3 - flash.each do |f| 4 - type = f[0].to_s.gsub('alert','error').gsub('notice','info') 5 :erb 6 toastr['<%= type%>']('<%= f[1]%>');

こうなります。

erb

1<% unless flash.empty? %> 2 <script type="text/javascript"> 3 <% flash.each do |f| %> 4 <% type = f[0].to_s.gsub('alert','error').gsub('notice','info') %> 5 toastr['<%= type%>']('<%= f[1]%>'); 6 7 8 <% end %> 9 </script> 10<% end %>

:javascriptの代わりに%script{:type => 'text/javascript'}を使うとか、:erbを使うとかがポイントでしょうか。

投稿2018/08/10 08:09

takahashim

総合スコア1877

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

messy1019

2018/08/10 11:10 編集

ご回答頂きましてありがとうございます! 同じエラーが下記でも発生しているのですが、 ●今のコード %li(id="micropost-#{micropost.id}") = link_to gravatar_for(micropost.user, size: 50), micropost.user %span.user= link_to micropost.user.nickname, micropost.user %span.content = micropost.content = image_tag micropost.picture.url if micropost.picture? %span.timestamp Posted #{time_ago_in_words(micropost.created_at)} - if current_user?(micropost.user) = link_to "削除する", micropost, method: :delete, data: { confirm: "削除してもいいですか?"} = render 'likes/like', micropost: micropost 1行目で同じエラーが発生しています。 同じように:erbで下記のように修正すると、 :erb <li id="micropost-<%= micropost.id %>">; = link_to gravatar_for(micropost.user, size: 50), micropost.user %span.user= link_to micropost.user.nickname, micropost.user %span.content = micropost.content = image_tag micropost.picture.url if micropost.picture? %span.timestamp Illegal nesting: nesting within plain text is illegal.という別のエラーが発生しました。 こちらはどう対処すれば良いでしょうか? ●元のコード <li id="micropost-<%= micropost.id %>"> <%= link_to gravatar_for(micropost.user, size: 50), micropost.user %> <span class="user"><%= link_to micropost.user.nickname, micropost.user %></span> <span class="content"> <%= micropost.content %> <%= image_tag micropost.picture.url if micropost.picture? %> </span> <span class="timestamp"> Posted <%= time_ago_in_words(micropost.created_at) %> <% if current_user?(micropost.user) %> <%= link_to "削除する", micropost, method: :delete, data: { confirm: "削除してもいいですか?"} %> <% end %> </span> <%= render 'likes/like', micropost: micropost %> </li>
messy1019

2018/08/10 13:24

下記のような書き方西てみました。 :erb <li id="micropost-<%= micropost.id %>"> :haml = link_to gravatar_for(micropost.user, size: 50), micropost.user %span.user= link_to micropost.user.nickname, micropost.user %span.content = micropost.content = image_tag micropost.picture.url if micropost.picture? %span.timestamp Posted #{time_ago_in_words(micropost.created_at)} - if current_user?(micropost.user) = link_to "削除する", micropost, method: :delete, data: { confirm: "削除してもいいですか?"} = render 'likes/like', micropost: micropost
takahashim

2018/08/10 18:03

インデントが消える環境だとhamlは読んでも理解できないですね…。 あと、erbを多用するなら、hamlではなく普通にerbで書いてもいいのでは、という気もちょっとしました。
messy1019

2018/08/11 03:30

そうなんですね。。。 その後、hamlの書き方を変えたところうまくいきました! %li{:id => "micropost-#{micropost.id}"} = link_to gravatar_for(micropost.user, size: 50), micropost.user %span.user= link_to micropost.user.nickname, micropost.user %span.content = micropost.content = image_tag micropost.picture.url if micropost.picture? %span.timestamp Posted #{time_ago_in_words(micropost.created_at)} - if current_user?(micropost.user) = link_to "削除する", micropost, method: :delete, data: { confirm: "削除してもいいですか?"} = render 'likes/like', micropost: micropost ご回答頂きましてありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問