2011-06-21 22 views
7

मैं मचान द्वारा बनाए गए डिफ़ॉल्ट कोड का उपयोग कर रहा हूं। मैंने कुछ भी नहीं बदला है।अपरिभाषित विधि model_name

Showing app/views/presences/_form.html.erb where line #1 raised: 
undefined method `model_name' for NilClass:Class 

1: <%= form_for(@presence) do |f| %> 
2: <% if @presence.errors.any? %> 
3:  <div id="error_explanation"> 
4:  <h2><%= pluralize(@presence.errors.count, "error") %> prohibited this presence from being saved:</h2> 

यहां क्या गलत है? मैं कभी भी "model_name" नामक विधि नहीं बुला रहा हूं और यह कोड स्वचालित है, तो यह क्यों काम नहीं करता है?

धन्यवाद

उत्तर

20

new या अन्य संबंधित कार्रवाई उस प्रपत्र प्रदर्शित हो रहा है में अपने presences_controller को यह जोड़ने का प्रयास करें:

#presuming your model is called Presence 
@presence = Presence.new 
+2

धन्यवाद, यह काम करता है। मैं अभी भी यह समझने की कोशिश कर रहा हूं कि RoR कैसे काम करता है, लेकिन ये त्रुटि संदेश बहुत उपयोगी नहीं हैं .. – Bv202

+0

कॉलर के बाध्यकारी का उपयोग करें, और बेहतर त्रुटियां मणि - आपको डिबगिंग के लिए विंडो में कंसोल मिलता है। –

5

दृश्य (और form_for विधि) वास्तव में एक वास्तविक उपस्थिति की अपेक्षा @presence चर में मॉडल। एक @ -अवेरीबल इस तरह से नियंत्रक से गुजरता है, जिसका मतलब है कि आपको इसे नियंत्रक कार्रवाई में स्थापित करना था।

"नई" कार्रवाई के मामले में - आपके पास मौजूदा उपस्थिति ऑब्जेक्ट नहीं है जिसके साथ आप खेल रहे हैं (विपरीत, "शो" कहें) - इसलिए आपको बस एक खाली, नया सेट अप करना होगा।

form_for विधि इस तरह की उपस्थिति वस्तु लेगी और: यदि यह डीबी से मौजूदा है, तो इसे अपडेट करने के लिए सही पोस्ट-रूट तैयार करेगा। लेकिन अगर यह एक नया, खाली है, तो एक नया निर्माण करने के लिए सही मार्ग तैयार करेगा।

आशा है कि मदद करता है ...

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