Возможный дубликат:
Flash-сообщения в Partials (Rails 3 )а>
Я изучаю 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
Ключевая проблема, по-видимому, заключается в том, что flash равен нулю, потому что моя частичная часть _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 %>
... прерывает работу флэш-сообщений (потому что «if flash» всегда ложно).
У меня два связанных вопроса:
Почему и как именно использование решения partials/flash меняет поведение приложения rails?
Как изменить мои частичные/вспышки, чтобы они работали?
Спасибо!