2011-09-23 6 views
5
<%# Flash-based notifications %> 
<% if flash[:error].present? or flash[:notice].present? %> 
    <div class="messages <%= flash[:error] ? 'error' : 'notice' %>"> 
    <ul id="feedback"> 
     <% if flash[:error].present? %> 
     <li><%= flash[:error] %></li> 
     <% end %> 
     <% if flash[:notice].present? %> 
     <li><%= flash[:notice] %></li> 
     <% end %> 
    </ul> 
    </div> 
<% end %> 

किसी कारण से, सरल रूप में के रूप में यह लगता है, मेरी एक आंशिक अंदर फ्लैश से पढ़ने के लिए प्रयास इस त्रुटि का उत्पादन किया जाता है, क्योंकि फ़्लैश nil को तैयार है। क्या मुझे इसे मैन्युअल रूप से शुरू करने की ज़रूरत है, या कुछ?रेल सत्र फ़्लैश का उपयोग करने की कोशिश कर रहा है, लेकिन शून्य हो रही है। [] त्रुटियां?

यह रेल 3.1.0 है। त्रुटि कोड स्निपेट की लाइन 2 पर है, जहां यह flash[:error] तक पहुंचने का प्रयास करती है।

You have a nil object when you didn't expect it! 
You might have expected an instance of Array. 
The error occurred while evaluating nil.[] 

मुझे कुछ याद आना चाहिए। मैं निश्चित रूप से इसे कहीं भी ओवरराइड नहीं कर रहा हूं।

उत्तर

10

वे यहां कुंजी हैं कि आप आंशिक अंदर फ्लैश तक पहुंचने का प्रयास कर रहे हैं। आप आंशिक करने के लिए के माध्यम से फ्लैश हैश पारित करने के लिए अपने विधि प्रस्तुत करना में निम्न कार्य करने की आवश्यकता होगी:

render YOUR_PARTIAL, :flash => flash 

http://guides.rubyonrails.org/layouts_and_rendering.html#passing-local-variables

संपादित करें:

आसान समाधान: अपने आंशिक कुछ भी करने के लिए नाम बदलने लेकिन _flash।

क्योंकि आपके आंशिक फ़्लैश बुलाया गया था, यह हुआ:

हर आंशिक भी आंशिक (ऋण अंडरस्कोर) के रूप में एक ही नाम के साथ एक स्थानीय चर है। वस्तु विकल्प:

फ़्लैश वस्तु एक स्थानीय आंशिक के नाम के साथ बनाया चर द्वारा ओवरराइट किया जा रहा था आप के माध्यम से इस स्थानीय चर करने के लिए एक वस्तु पारित कर सकते हैं।

इस थोड़ा स्पष्ट करने के लिए, मान लीजिए कि आप एक टिप्पणी मॉडल है और आप आंशिक टिप्पणी प्रस्तुत करना, आप की तरह कुछ कर सकते हैं:

#_comment.html.erb 
<h1>comment.user.name</h1> 
<p>comment.body</p> 

आप पंक्तियों के साथ कुछ कर रही द्वारा इस आंशिक कहेंगे का:

render @customer 

अब फ्लैश के साथ शब्द ग्राहक की जगह और क्यों यह एक मुद्दा था आप देखेंगे।

यह कार्यक्षमता आमतौर पर सुविधा समस्या का कारण बनती है।

+0

मैंने सोचा कि देखने वाले सहायक मेरे आंशिक लोगों के लिए सुलभ थे? मेरे सभी आवेदन सहायक निश्चित रूप से हैं। मैं इसे एक दूंगा, धन्यवाद। – d11wtq

+0

दरअसल, उस लिंक को पढ़ने के बाद, आपके आंशिक को _flash नहीं कहा जाता है? यदि ऐसा है, तो इसे सचमुच किसी और चीज़ का नाम दें और देखें कि क्या यह काम करता है। – Gazler

+0

ठीक है कि निश्चित रूप से इसे ठीक करता है। मुझे लगता है कि मैं पूरी तरह से समझ नहीं पा रहा हूं कि 'फ्लैश' कहां से आता है। मिडलवेयर को देखते हुए यह अनुरोध पर एक विधि है। मुझे लगता है कि इसे एक दृश्य सहायक के रूप में उजागर किया गया था क्योंकि यह दृश्य के लिए सुलभ है :) – d11wtq

संबंधित मुद्दे

 संबंधित मुद्दे