2013-02-01 18 views
11

में संदर्भित रिलेशनशिप फ़ील्ड को एलिस करना नीचे दिए गए मोंगोइड मॉडल में, मैं belongs_to रिलेशनशिप फ़ील्ड को कैसे उपनाम करता हूं?मोंगोइड

class Contact 
    field :nm, :as => :name, :type => String # field aliasing 
    embeds_one :address, :store_as => :ad # embedded document aliasing 
    belongs_to :account # referenced relation doesn't support store_as 
end 

मैं एक क्षेत्र account_id के बजाय ac बुलाया में खाता आईडी संग्रहीत करना चाहते हैं।

उत्तर

1

Mongoid 'inverse_of'

का उपयोग करते हुए एक व्युत्क्रम की आवश्यकता नहीं है, तो एक belongs_to या has_and_belongs_to_many तरह से एक रिश्ते के लिए मनमाने ढंग से नाम का उपयोग करने की अनुमति देता है, सुनिश्चित करें कि: inverse_of => शून्य पर सेट किया गया है रिश्ता। यदि उलटा जरूरी है, तो संभावित रूप से प्रतिकूल संबंधों के नाम से पता नहीं लगाया जा सकता है और आपको को स्पष्ट रूप से उलझन के संबंध में मोंगोइड को बताना होगा।

तो, उपयोग 'एसी' उपनाम के रूप में के लिए यह inverse_of जोड़ने के लिए आवश्यक है:

class Contact 
    field :nm, :as => :name, :type => String # field aliasing 
    embeds_one :address, :store_as => :ad # embedded document aliasing 
    belongs_to :ac, class_name: 'Account', inverse_of: :contact 
end 

class Account 
    has_one :contact, class_name: 'Contact', inverse_of: :ac 
end 
+0

यह मेरी समस्या का समाधान नहीं है। मैं खाता फ़ील्ड को 'एसी' के बजाय 'खाता' के रूप में संदर्भित करना चाहता हूं, इसलिए उपनाम सुविधा की आवश्यकता है। –

+1

आप conact.ac और contact.account द्वारा एक बार में पता करना चाहते हैं? कृपया समझाईए। –

+1

मोंगोइड लाइब्रेरी फ़ील्ड नामों को अलियासिंग के लिए एक सुविधा प्रदान करता है। जब आप बड़े आकार के संग्रह से निपट रहे हैं तो यह काफी उपयोगी है। अनिवार्य रूप से, यदि आप मेरे प्रश्न में पहले परिदृश्य को देखते हैं, तो मैं संग्रह में नाम 'एनएम' के रूप में संग्रहीत करता हूं लेकिन इसे 'नाम' के रूप में एक्सेस/क्वेरी करता हूं। यह सुविधा नियमित फ़ील्ड और एम्बेडेड एसोसिएशन के लिए काम करती है। संदर्भित एसोसिएशन के लिए इस विकल्प को सेट करने के लिए कोई दस्तावेज तरीका नहीं है। –

6

आप उपयोग कर सकते हैं: foreign_key MongoDB क्षेत्र का नाम निर्दिष्ट करने के लिए।

alias :account_id :ac 

या परिभाषित करने ACCOUNT_ID belongs_to से पहले:

belongs_to :account, foreign_key: :ac 

हालांकि, अगर आप ACCOUNT_ID उपयोग करना चाहते हैं, तो आपको इसकी उर्फ ​​घोषित करने के लिए की जरूरत है

field :account_id, as: :ac 
+0

'विदेशी_की' को संबंध के दोनों किनारों पर सेट करने की आवश्यकता है। – user1032752