2012-06-26 8 views
10

object_id का उपयोग मैं केविन Skoglund ट्यूटोरियल रेल 3 आवश्यक प्रशिक्षण, जिसके लिए लिखा गया था पर रूबी अनुसरण कर रहा हूँ रेल 3.0, हालांकि मैं वर्तमान में 3.2 का उपयोग कर रहा हूं। यह पृष्ठों_ नियंत्रक में निम्न विधि का उपयोग पहले_फिल्टर के साथ करता है ताकि केवल मूल विषय से संबंधित पृष्ठ प्रदर्शित हो सकें।3.0/3.2 रेल: कहा जाता है शून्य के लिए आईडी है, जो गलती से 4 होगा - यदि आप वास्तव में नहीं के बराबर की आईडी चाहता था,

ट्यूटोरियल स्पष्ट .find_by_id का उपयोग करता है, तो परिणाम यह नहीं के बराबर है "एक त्रुटि नहीं लौटेगा" क्योंकि। हालांकि मुझे "नील के लिए बुलाया गया आईडी मिलता है, जो गलती से 4 होगा - यदि आप वास्तव में शून्य की आईडी चाहते हैं, तो ऑब्जेक्ट_आईडी का उपयोग करें" त्रुटि को उस पृष्ठ को देखने का प्रयास करते समय @ subject को शून्य पर सेट किया गया है।

def find_subject 
    if params[:subject_id] 
    @subject = Subject.find_by_id(params[:subject_id]) 
    end 
end 

वास्तविक कोड है कि त्रुटि पैदा कर रहा है:

def list 
    @pages = Page.order("pages.position ASC").where(:subject_id => @subject.id) 
end 

यह कुछ 3.0 बाद हुए बदलावों को है? यदि हां, तो 3.2 में इस कार्यक्षमता को लागू करने का सही तरीका क्या होगा?

उत्तर

11

संदेश:

-

"कहा जाता है शून्य के लिए आईडी है, जो गलती से 4 हो सकता है अगर तुम सच में नहीं के बराबर की आईडी चाहता था, object_id का उपयोग करें"

रेल में मानक संदेश है जो आपको बताता है कि आपने को nil मान पर आमंत्रित करने का प्रयास किया है।

तो @subject शून्य है, तो अगर आप @subject.id पर कॉल करने का प्रयास करते हैं तो यह संदेश प्राप्त करने के लिए सामान्य, उचित व्यवहार है।

मैं अनुशंसा करता हूं कि दृश्य फ़ाइल में आप ध्यान दें कि @subjectnil हो सकता है और यह जानकारी दे सकता है कि आप जानकारी कैसे पेश करते हैं। कोड देखें और सोचें कि आपको @subjectnil पर दृश्य में क्या प्रस्तुत करना चाहिए।

2

नहीं कोड आप मैं के साथ काम कर रहे हैं गलत हो सकता है देखा है। लेकिन अगर आप एक त्वरित जांच के लिए

params[:id] 

का उपयोग कर किया जाना चाहिए, बस अगर बयान से पहले इस डाल:

puts ">>> #{params[:subject_id]}" 

यदि यह आप आईडी देता है, मैं गलत हूँ ...

0

कोड आप चिपकाया संभावना है कि त्रुटि फेंक नहीं है। आपके विचार में आप शायद @subject.id प्रदर्शित कर रहे हैं जो उस त्रुटि को फेंक देगा। आपको एक स्टैक ट्रेस मिलना चाहिए जो आपको इस मुद्दे पर सटीक रेखा देता है।

+0

त्रुटि दिखाते हुए कोड के साथ प्रश्न अद्यतन किया – Nick5a1