2012-01-31 10 views
12

यहां स्थिति है।Mongoid foreign_key को पूर्णांक के रूप में कैसे सहेजने के लिए या मूल मॉडल को रखने के लिए इंटीजर आईडी

user embed_one profile 
profile belongs_to city 

मैं

id as Integer 
name as String 

अब मैं user.update_attributes(:profile_attributes{:city_id=>"5"}) कर रहा हूँ एक ब्राउज़र प्रपत्र प्रस्तुत करने का अनुकरण के साथ एक शहर तालिका ले लिया है। फिर मैं user.profile देखता हूं, मुझे लगता है कि city_id स्ट्रिंग के रूप में संग्रहीत है। यह शून्य देने के लिए मेरे user.profile.city प्रस्तुत करता है।

मुझे आश्चर्य है कि यहां क्या करना सही है। क्या मुझे अपना शहर आईडी स्ट्रिंग या बीएसओएन ऑब्जेक्ट होना चाहिए? या क्या मुझे mongoid store city_id को पूर्णांक के रूप में बनाने के लिए update_attributes को अवरुद्ध करने का प्रयास करना चाहिए? शहर के लिए आईडी के रूप में इंटीजर का उपयोग करने का कारण यह है क्योंकि मैंने सोचा था कि इंटीजर के माध्यम से खोज स्ट्रिंग के माध्यम से खोज से तेज है। और मेरे पास राज्य और शहर की टेबल भी हैं और मैं उम्मीदवारों से आईड्स से मेल खाना चाहता हूं इसलिए मैं बीएसओएन रैंडोम कुंजी का उपयोग नहीं करना चाहता हूं।

उत्तर

0

निश्चित रूप से, यदि आप मोंगोइड का उपयोग करते हैं, तो सही तरीके से बीएसओएन ऑब्जेक्ट्स को आईड्स के रूप में उपयोग करना है। लेकिन अगर आपको पूरी तरह से शहर आईडी के रूप में पूर्णांक का उपयोग करने की आवश्यकता है, तो आप इस

class Profile 
    def city 
    City.where(:id => self.city_id).last 
    end 

    def city=(new_city) 
    self.city_id = new_city.id 
    end 
end 
+0

जैसे कोड के साथ belong_to अनुकरण कर सकते हैं यह आशाजनक लग रहा है। लेकिन यह समस्या जोड़ने के लिए कई विधियां हो सकती हैं यदि समस्या कई तालिकाओं और कई विशेषताओं से संबंधित है। अच्छा होगा अगर मैं स्ट्रिंग पैरा को पूर्णांक में स्वचालित रूप से परिवर्तित कर सकता हूं यदि मैं उन गुणों को पूर्णांक के रूप में घोषित करता हूं। बंदरगाह के लिए बंदर बंदरगाह, शायद? – benzhang

+0

बीसन वस्तुओं के साथ क्या समस्या है? – rwz

+0

मैं सिटी स्टेटस टेबल पोर्ट कर रहा हूं। और मैं पूर्णांक को राज्य की आईडी बनना चाहता हूं, इसलिए मेरा शहर सही स्थिति को संदर्भित करता है। मुझे लगता है कि मैं विदेशी कुंजी के रूप में एक अलग विशेषता का उपयोग कर सकता हूं तो मैं बीएस को आईडी के रूप में नहीं मानूंगा। – benzhang

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