重複の可能性:
パーシャルのフラッシュメッセージ(Rails 3)
私はMichaelHartlのRailstutorialを実行しており、リスト7.26はアプリケーションレイアウトにフラッシュメッセージを追加します。
<!DOCTYPE html>
<html>
.
.
.
<body>
<%= render 'layouts/header' %>
<div class="container">
<% flash.each do |key, value| %>
<div class="alert alert-<%= key %>"><%= value %></div>
<% end %>
<%= yield %>
<%= render 'layouts/footer' %>
<%= debug(params) if Rails.env.development? %>
</div>
.
.
.
</body>
</html>
これは正常に機能します。
ただし、部分フォルダに_flash.html.erbを作成して、このコードをクリーンアップしようとしました...
<% flash.each do |key,value| %>
<%= content_tag(:div, value, class: "alert alert-#{key}") %>
<!-- <div class="alert alert-<%= key %>"><%= value %></div> -->
<% end %>
...そして使用するよりも...
<%= render 'partials/flash' %>
...私のアプリケーションレイアウトでは、すべてのRspecテストが失敗し始め、テストごとに次のメッセージが表示されます。
Failure/Error: before { visit signup_path }
ActionView::Template::Error:
undefined method `each' for nil:NilClass
重要な問題は、フラッシュがnilであるということのようです。これは、_flashの一部を次のようなifステートメントでラップしているためです...
<% unless flash.empty? %>
<% flash.each do |key,value| %>
<%= content_tag(:div, value, class: "alert alert-#{key}") %>
<!-- <div class="alert alert-<%= key %>"><%= value %></div> -->
<% end %>
<% end %>
...上記と同じNilClassに関するエラーメッセージが生成され、次のようなifステートメントでラップされます...
<% if flash %>
<% flash.each do |key,value| %>
<%= content_tag(:div, value, class: "alert alert-#{key}") %>
<!-- <div class="alert alert-<%= key %>"><%= value %></div> -->
<% end %>
<% end %>
...フラッシュメッセージの動作を中断します(「フラッシュの場合」は常にfalseであるため)。
関連する質問が2つあります。
パーシャル/フラッシュソリューションを使用すると、Railsアプリの動作がどのように正確に変わるのですか?
パーシャル/フラッシュを変更して機能させるにはどうすればよいですか?
ありがとう!