5

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:

  1. Perché/come fa esattamente utilizzando il/Flash soluzione parziali modificare il comportamento di un'applicazione rotaie?

  2. Come cambiare i miei parziali/flash in modo che funzioni?

Grazie!

risposta

3

Set gente del posto con un hash di Params/valori da passare al parziale

<%= render :partial => "partials/flash", :locals => {:flash => flash} %> 
Problemi correlati