2010-06-07 14 views
15

के रूप में गलत कॉन्फ़िगर किया गया है, यहां एक ऐसा है जो मुझे थोड़ी देर के लिए रुक गया, हालांकि पीछे की ओर यह स्पष्ट होना चाहिए था। मुझे त्रुटि संदेशपॉलिमॉर्फिक एसोसिएशन त्रुटि को बढ़ाने के बजाय 0 को इंसर्जर करता है जब कॉलम को इंटीजर

NoMethodError: undefined method `constantize' for 0:Fixnum 

एक पॉलिमॉर्फिक एसोसिएशन के माध्यम से मॉडल तक पहुंचने पर मुझे त्रुटि संदेश मिल रहा था। एसोसिएशन के belongs_to पक्ष पर तालिका को बाहर करने के लिए एक स्ट्रिंग के बजाय type कॉलम पूर्णांक था।

आसानी से तय किया गया, लेकिन ऐसा लगता है जैसे रेल को इस स्थिति में एक त्रुटि उठानी चाहिए - इसके बजाय यह खुशी कॉलम में 0 के साथ खुशी से जोड़ती है।

+0

मुझे लगता है कि प्रकार mysql आरक्षित कीवर्ड है कृपया अपना कॉलम नाम बदलें और पुनः प्रयास करें। – Salil

+0

कॉलम को 'टाइप'' नाम नहीं दिया गया है - यह 'something_type' है, जहां' कुछ' पॉलिमॉर्फिक एसोसिएशन का नाम है। – zetetic

+0

मुझे लगता है कि इसका उत्तर 'दोषों की तुलना में अपने कॉलम ठीक से सेट करें' –

उत्तर

9

ऐसा इसलिए होता है क्योंकि अनुरोधों के माध्यम से अनुरोध पैरामीटर स्ट्रिंग के रूप में आते हैं, और इसलिए पैरामीटर से सेट पूर्णांक कॉलम के लिए, रेल पूर्णांक प्राप्त करने के लिए स्ट्रिंग पर to_i कहते हैं। यदि यह इससे एक पूर्णांक को हल नहीं कर सकता है (जो तब होता है जब स्ट्रिंग कुछ अंकों से शुरू नहीं होती है) तो to_i 0 देता है। यह सिर्फ रूबी कैसे काम करता है। कभी-कभी रेल इसे स्पॉट करेंगे और एक चेतावनी उठाएंगे, लेकिन संभवतः यह हर कॉलम का नाम नहीं जान सकता जिसे इसे जांचना है। जैसे इसे देखें (कंसोल से)

>> quiz = Quiz.first 
=> <a quiz> 
>> quiz.user_id = "foo" 
=> "foo" 
>> quiz.save 
=> true 
>> quiz.user_id 
=> 0 
+1

आप बिल्कुल सही हैं - कॉलम को पहले स्थान पर सही तरीके से सेट करें, और कोई समस्या नहीं है। लेकिन इस मामले में, मुझे लगता है कि रेल पॉलिमॉर्फिक एसोसिएशन (कॉलम नामों के आधार पर) को स्थान दे सकते हैं और माइग्रेशन चलाते समय चेतावनी देते हैं। निश्चित रूप से मुझे कुछ बाल खींचने से बचाया होगा। – zetetic

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