संभव डुप्लिकेट:
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 %>
... काम करने से फ़्लैश संदेशों को तोड़ता है (क्योंकि 'फ्लैश' हमेशा झूठा होता है)।
मैं दो संबंधित प्रश्न हैं:
क्यों/कैसे वास्तव में आंशिक/फ्लैश समाधान एक रेल अनुप्रयोग के व्यवहार को बदलने का उपयोग कर रहा है?
मेरे आंशिक/फ्लैश को कैसे बदला जाए, तो यह काम करेगा?
धन्यवाद!