5

Powiel możliwe:
Flash Messages in Partials (Rails 3)Railstutorial: Umieszczanie wiadomości flash w częściowym błędzie wydajności "nieokreślona metoda" dla każdego "dla zer: NilClass"?

robie Michael Hartl za Railstutorial i listing 7.26 dodaje wiadomości bezpośrednie do układu aplikacyjnego:

<!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> 

To działa prawidłowo.

Jednak starałem się oczyścić ten kod tworząc _flash.html.erb w moim częściowej folderu ...

<% flash.each do |key,value| %> 
    <%= content_tag(:div, value, class: "alert alert-#{key}") %> 
    <!-- <div class="alert alert-<%= key %>"><%= value %></div> --> 
<% end %> 

... a nie za pomocą ...

<%= render 'partials/flash' %> 

... w moim układzie aplikacji wszystkie moje testy rspec zaczynają niepowodzeniem z następującym komunikatem dla każdego testu:

Failure/Error: before { visit signup_path } 
ActionView::Template::Error: 
    undefined method `each' for nil:NilClass 

kluczem problem wydaje się, że lampa błyskowa jest zerowa, bo owijając moje _flash częściowe w if jak to ...

<% 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 %> 

... daje ten sam komunikat o błędzie o NilClass jak wyżej i otoczenie go if tak ...

<% if flash %> 
    <% flash.each do |key,value| %> 
    <%= content_tag(:div, value, class: "alert alert-#{key}") %> 
    <!-- <div class="alert alert-<%= key %>"><%= value %></div> --> 
    <% end %> 
<% end %> 

... Łamie wiadomości flash od pracy (ponieważ "jeśli flash" jest zawsze fałszywe).

Mam dwie pokrewnych pytania:

  1. Dlaczego/jak dokładnie przy użyciu partials/rozwiązanie błysk zmienić zachowanie aplikacji Rails?

  2. Jak zmienić moje częściowe/flash, aby zadziałało?

Dzięki!

Odpowiedz

3

Set miejscowi z hash params/wartości, aby przejść do częściowego

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