2012-06-25 9 views
6

मेरे रेल 3.2.6 ऐप में, मेरे पास एक विजेट है जो विजेट के बारे में डेटा संग्रह का प्रतिनिधित्व करता है। मेरे दिमाग में, इस वर्ग के लिए सही नाम WidgetData है, बहुवचन, क्योंकि मेरे पास प्रति विजेट डेटा के एक से अधिक आइटम हैं।रेल डेटा/डाटाम इन्फ्लिक्शन समस्या

अगर मैं रेल पूछना इस वर्ग के लिए एक फ़ॉर्म जनरेट करें:

= form_for @widget_data do |f| 
    ... 

मैं एक त्रुटि ActionView::Template::Error (undefined method 'widget_datum_path' ... मिलता है। संभवतः यह रेल डेटा/डाटाम इन्फ्लिक्शन नियम की वजह से है।

मुझे यकीन है कि इसे हल करने के लिए सबसे अच्छा तरीका है: मैं रेल को यह निर्देश दे सकता हूं कि मेरा मॉडल वास्तव में WidgetDatum होना चाहिए। या मैं इस विशेष मामले में किसी भी तरह से इन्फ्लिक्शन नियम के उपयोग को अक्षम कर सकता हूं, लेकिन मुझे यकीन नहीं है कि यह कैसे करना है। सलाह स्वागत है।

एक संभावित जवाब की आशा करने के लिए: कारण यह है कि मॉडल बस Widget नहीं कहा जाता है कि मैं एक बहाना वर्ग कि पहले से ही नाम है, जो एक विजेट दोनों WidgetData और अन्य जानकारी को शामिल रूप में अच्छी तरह का अधिक समृद्ध दृश्य प्रस्तुत करता है।

उत्तर

10

फ़ाइल के लिए इस कोड जोड़ें: "। बहुवचन है, क्योंकि मैं विजेट प्रति डेटा की एक से अधिक आइटम है" config/initializers/inflections.rb

ActiveSupport::Inflector.inflections do |inflect| 

    inflect.irregular 'widgetdata', 'widgetdatas' # or whatever you want your plural to be 

end 

पर अपनी टिप्पणी के समाधान के लिए

विचार यह है कि विजेट डेटा की प्रत्येक पंक्ति यह स्वयं की वस्तु है। सक्रिय रिकॉर्ड डेटा की प्रत्येक पंक्ति के लिए विजेटडेटा का एक उदाहरण बनाएगा। आपकी डेटाबेस तालिका का नाम (रेल सम्मेलन के अनुसार) विजेटडेटा होना चाहिए, क्योंकि तालिका में कई विजेटडेट्स हैं। लेकिन जब रेल में, डेटा की प्रत्येक पंक्ति को आपके मॉडल वर्ग के आधार पर एक व्यक्तिगत वस्तु के रूप में तुरंत चालू किया जाता है। यह तब तक काम करेगा जब तक आप अपने परिवर्तनों को सही तरीके से कॉन्फ़िगर करते हैं। मैं आमतौर पर मौजूदा डेटा मॉडल पर इंटरफ़ेस बनाने के दौरान ऐसा करने का प्रयास करता हूं। लेकिन फिर भी आपको पता चलेगा कि आपके मॉडल में self.table_name = 'old table name convention' का उपयोग करके, मौजूदा मॉडल के शीर्ष पर एक नया रेल डेटा मॉडल बनाने के लिए कभी-कभी बेहतर होता है।

+0

यह शायद inflect.irregular 'widget_data' होना चाहिए – 0x4a6f4672

1

यदि आप इस मामले में इन्फ्लिक्शन नियम बदलना चाहते हैं, तो आपको this question पर एक नज़र डालें।

+0

धन्यवाद। मैंने अपना प्रश्न पोस्ट करने से पहले उत्तर के लिए एसओ खोजा; आपके खोज कौशल मेरे लिए स्पष्ट रूप से बेहतर हैं! –

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