2009-11-12 16 views
9

मेरा ऐप यादृच्छिक रूप से शून्य के लिए एक "अपरिभाषित विधि 'मानचित्र फेंक रहा है: NilClass" त्रुटि जब उपयोगकर्ता अपनी प्रोफ़ाइल को अपडेट करने का प्रयास कर रहे हैं।शून्य के लिए अपरिभाषित विधि 'मानचित्र': NilClass

लेकिन अजीब बात यह है कि यह कह रहा है कि त्रुटि अद्यतन पर होती है, लेकिन त्रुटि रेखा वास्तव में एक दृश्य में है।

पूर्ण त्रुटि:

{"user"=>{"email_notify"=>"[email protected]", "network_id"=>"", 
"password_confirmation"=>"[FILTERED]", "mobile"=>"", "password"=>"[FILTERED]", 
"email"=>"[email protected]ple.com"}, "action"=>"update", "_method"=>"put", "id"=>"5089", 
"controller"=>"users"} 

ईमानदारी से यकीन है कि जहां भी तलाश शुरू करने के लिए नहीं:

users#update (ActionView::TemplateError) "undefined method `map' for nil:NilClass" 

On line #52 of app/views/users/edit.html.erb 

Line 52: <%= options_from_collection_for_select(@networks_domestic, 'id', 'name', @user.network_id) %> 

और यहाँ हाल ही में एक त्रुटि से पैरामीटर हैं। मेरे पास एक उपयोगकर्ता है कि वह IE से एक ही जानकारी अपडेट कर सकता है लेकिन फ़ायरफ़ॉक्स से नहीं। और जब मैं उनकी एक ही जानकारी का उपयोग करता हूं तो मैं बिना किसी समस्या के अपडेट कर सकता हूं। तो, मैं फंस गया हूँ।

उत्तर

17

सर्वश्रेष्ठ अनुमान ...

आपका संपादन ठीक तरह से कार्य को परिभाषित करता है जब तक आप अद्यतन समारोह में त्रुटि का सामना करना और render :action => "edit" फोन @networks_domestic तो सब कुछ बहुत अच्छा है।

रेंडर संपादन फ़ंक्शन को कॉल नहीं करता है बल्कि संपादन दृश्य को प्रस्तुत करता है। इसलिए, एक असफल अद्यतन के मामले में आपको अपडेट से लौटने से पहले @networks_domestic को परिभाषित करना होगा।

तो कहते हैं, उदाहरण के लिए, आप निम्न है:

def edit 
    @user = User.find(params[:id]) 
    @networkd_domestic = [...] 
    end 

    def update 
    @user = User.find(params[:id]) 

    respond_to do |format| 
     if @user.update_attributes(params[:user]) 
     flash[:notice] = "User was successfully updated." 
     format.html { redirect_to(admin_users_url) } 
     else 
     format.html { render :action => "edit" } 
     end 
    end 
    end 

प्राप्त होने वाले त्रुटि आप क्योंकि @networkd_domestic का वर्णन कर रहे हैं अद्यतन समारोह में त्रुटि स्थिति में निर्धारित नहीं है जाएगा।

संपादन प्रस्तुत करने से पहले @networkd_domestic = [...] जोड़ें और आपको अच्छा होना चाहिए।

+0

हाय @ टोनी-फॉन्टनोट, आपके सुझाव ने भी मेरे लिए काम किया। धन्यवाद –

+0

3 साल बाद ... और अभी भी मुझे बहुत मूल्यवान समय बचाया :)। धन्यवाद – Hugo

+0

यह वही समस्या है जो मैंने पार किया था। धन्यवाद! क्या संपादन और अपडेट दोनों की बजाय @networkd_domestic को एक स्थान पर सेट करने का कोई दृष्टिकोण है? – EricC

6

@networks_domentic नियंत्रक में ठीक से सेट हो रहा है? लाइन 52 से ठीक पहले <%= @networks_domestic.inspect %> जोड़ें और देखें कि आपको क्या मिलता है। नियंत्रक में @networkd_domestic.nil? के लिए जांचें और सुनिश्चित करें कि आप दृश्य में nil नहीं भेजते हैं।

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

आप options_from_collection_for_select के लिए स्रोत को देखें, तो आप देखेंगे कि यह (इस मामले में @networks_domestic) संग्रह आप पारित पर map बुला रहा है देखेंगे।

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