5

संभव डुप्लिकेट:
Flash Messages in Partials (Rails 3)रेलस्टोरियल: आंशिक उपज में फ्लैश संदेश डालना त्रुटि "अनिर्धारित विधि 'प्रत्येक' शून्य 'के लिए: NilClass"?

मैं माइकल हार्टल के Railstutorial कर रहा हूँ और listing 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.each do |key,value| %> 
    <%= content_tag(:div, value, class: "alert alert-#{key}") %> 
    <!-- <div class="alert alert-<%= key %>"><%= value %></div> --> 
<% end %> 

मेरी आंशिक फ़ोल्डर में एक _flash.html.erb बनाने के द्वारा इस कोड को साफ करने के लिए ... की कोशिश की ... और की तुलना में उपयोग करते हुए ...

<%= render 'partials/flash' %> 

... अपने आवेदन लेआउट में अपने सभी Rspec परीक्षण प्रत्येक परीक्षा के लिए निम्न संदेश के साथ असफल रहने शुरू:

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

कुंजी मुद्दा यह है कि फ्लैश नहीं के बराबर है, क्योंकि इस तरह एक अगर बयान में मेरी _flash आंशिक लपेटकर लगता है ...

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

... काम करने से फ़्लैश संदेशों को तोड़ता है (क्योंकि 'फ्लैश' हमेशा झूठा होता है)।

मैं दो संबंधित प्रश्न हैं:

  1. क्यों/कैसे वास्तव में आंशिक/फ्लैश समाधान एक रेल अनुप्रयोग के व्यवहार को बदलने का उपयोग कर रहा है?

  2. मेरे आंशिक/फ्लैश को कैसे बदला जाए, तो यह काम करेगा?

धन्यवाद!

उत्तर

3

पैरामीटर/मूल्यों की एक हैश के साथ सेट स्थानीय लोगों आंशिक

<%= render :partial => "partials/flash", :locals => {:flash => flash} %> 
को पारित करने के लिए