5

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

जब मैं हटाएँ बटन पर क्लिक मैं त्रुटि मिलती है:

undefined method `destroy' for nil:NilClass 

या तो रेल की तरह लगता है नहीं समझती जो भी कारण के लिए इस मामले में विधि को नष्ट, या रेल नष्ट करने के लिए कुछ भी नहीं देखा है, इसलिए शून्य: नील क्लास।

मेरा पहला प्रश्न यह पहचानने में है कि इनमें से कोई भी मामला है।

मेरे दूसरे प्रश्न यह तय है: डी

यहाँ मेरी show.html है:

<% provide(:title, "Log") %> 
<% provide(:heading, "Your Progress Log") %> 

<div class="row"> 
    <div class="span8"> 
    <% if @user.status_update.any? %> 
     <h3>Status Updates (<%= @user.status_update.count %>)</h3>  
     <table> 
     <thead> 
      <tr> 
      <th>Entry Date</th> 
      <th>Weight</th> 
      <th>BF %</th> 
      <th>LBM</th> 
      <th>Fat</th> 
      <th>Weight Change</th> 
      <th>BF % Change</th> 
      <th>Fat Change</th> 
      </tr> 
     </thead> 
     <tbody class = "status updates"> 
      <%= render @status_updates %> 
     </tbody>   
    <% end %> 
    </div> 
</div> 

"<% = प्रस्तुत करना @status_updates%>" _status_update आंशिक कहता है।

<tr> 
. 
. 
. 
. 
<% if current_user==(status_update.user) %> 
<td> 
     <%= link_to "delete", status_update, method: :delete %> 

</td> 
<% end %>   

</tr>          

और फिर अंत में, यहाँ StatusUpdateController

def destroy 
    @status_update.destroy 
    redirect_to root_url 
end 

यहाँ त्रुटि पृष्ठ पर मानकों हैं:

{"_method"=>"delete", 
"authenticity_token"=>"w9eYIUEd2taghvzlo7p3uw0vdOZIVsZ1zYIBxgfBymw=", 
"id"=>"106"} 
+1

@status_update आपके नियंत्रक में परिभाषित नहीं है। आपको पैरामीटर (पैराम्स [: आईडी]) के माध्यम से इसे एक्सेस करने की आवश्यकता है या संसाधनों का उपयोग करते समय, resource.destroy। यह सुनिश्चित करने के लिए कि कौन से पैरा का उपयोग करना है, अपने रेक मार्गों की जांच करें। –

+0

क्या आप अपनी विध्वंस विधि के लिए 'first_filter' में' @ status_update' असाइन कर रहे हैं? यदि नहीं, तो वह जगह है जहां आपकी समस्या है। –

उत्तर

9

आप किसी भी कोड नहीं दिखा रहे हैं के रूप में (फिल्टर या तो) जो @status_update असाइन कर सकता है, मुझे लगता है कि कोई नहीं है। तो, आपके destroy विधि में आपके आवृत्ति चर @status_update सेट नहीं है। आपको ऑब्जेक्ट की आईडी के साथ कक्षा से पूछताछ करने की आवश्यकता है।

इस प्रकार

अपने को नष्ट विधि पुनर्लेखन:

def destroy 
    @status_update = StatusUpdate.find(params[:id]) 
    if @status_update.present? 
     @status_update.destroy 
    end 
    redirect_to root_url 
end 

नोट: अपने वास्तविक वर्ग के नाम के साथ classname StatusUpdate बदलें।

+0

मैं देखता हूं। मैं एक अलग परियोजना के लिए एक ट्यूटोरियल का अनुसरण कर रहा हूं और कोड के कुछ बिट्स थे जिन्हें मैं समझ नहीं पाया था कि अब मुझे यह सही उद्देश्य है। इसे "सही उपयोगकर्ता" नामक एक निजी फ़ंक्शन मिला है जो किसी ऑब्जेक्ट आईडी पर @status_update इंस्टेंस निर्दिष्ट करता है। आपकी मदद के लिए धन्यवाद। –

+0

उस विधि को कैसे और कब कहा जाता है? पहले फ़िल्टर में – HungryCoder

+0

। मैं डाल: before_filter: correct_user, केवल: नष्ट और फिर तहत निजी मेरे पास है: निजी डीईएफ़ correct_user @status_update = current_user.status_update.find_by_id (पैरामीटर [: id]) redirect_to root_url यदि @ status_update.nil? अंत –

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