Eventuali duplicati:
Flash Messages in Partials (Rails 3)Railstutorial: Mettere messaggi flash in errore di rendimento parziale "metodo non definito 'ciascuno' per nil: NilClass"?
sto facendo Railstutorial di Michael Hartl e listing 7.26 aggiunge messaggi flash per il layout dell'applicazione:
<!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>
Questo funziona bene.
Tuttavia, ho provato a ripulire questo codice con la creazione di un _flash.html.erb nella mia cartella parziale ...
<% flash.each do |key,value| %>
<%= content_tag(:div, value, class: "alert alert-#{key}") %>
<!-- <div class="alert alert-<%= key %>"><%= value %></div> -->
<% end %>
... e che usare ...
<%= render 'partials/flash' %>
... in mio layout dell'applicazione tutte le mie prove RSpec iniziano in mancanza con il seguente messaggio per ogni prova:
Failure/Error: before { visit signup_path }
ActionView::Template::Error:
undefined method `each' for nil:NilClass
la chiave problema sembra essere che il flash è zero perché confezionamento mia _flash parziale in un'istruzione if come questo ...
<% 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 %>
... produce lo stesso messaggio di errore relativo NilClass come sopra e avvolgendolo in un'istruzione if come questo ...
<% if flash %>
<% flash.each do |key,value| %>
<%= content_tag(:div, value, class: "alert alert-#{key}") %>
<!-- <div class="alert alert-<%= key %>"><%= value %></div> -->
<% end %>
<% end %>
... interrompe il funzionamento dei messaggi flash (perché 'se flash' è sempre falso).
Ho due questioni correlate:
Perché/come fa esattamente utilizzando il/Flash soluzione parziali modificare il comportamento di un'applicazione rotaie?
Come cambiare i miei parziali/flash in modo che funzioni?
Grazie!