के रूप में यहां उनका उल्लेख:मैं हर जगह inverse_of का उपयोग क्यों नहीं करना चाहूंगा?
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
inverse_of स्मृति संघों में कैश और डेटाबेस प्रश्नों को कम करने के रेल बताने के लिए प्रकट होता है। उनके उदाहरण है:
class Dungeon < ActiveRecord::Base
has_many :traps, :inverse_of => :dungeon
has_one :evil_wizard, :inverse_of => :dungeon
end
class Trap < ActiveRecord::Base
belongs_to :dungeon, :inverse_of => :traps
end
कौन सा वे immediatly के साथ पालन करें:
for `belongs_to` associations `has_many` inverse associations are ignored.
तो मैं कई प्रश्न हैं।
- के लिए
has_many
पर उलटा संघों को नजरअंदाज कर दिया गया है? यदि हां, तो उनके उदाहरण को कैसे समझ में आता है? क्या यह कुछ भी नहीं करना चाहिए? जहां तक मेरा (यह मानते हुए यह कुछ भी करता है) बता सकते हैं सभी यह करने के लिए अनुमति देता है की तरह कुछ:
dungeon.traps.first.dungeon
.dungeon
करने के लिए अंतिम कॉल एक पूरी नई क्वेरी नहीं पैदा करने, लेकिन केवल के लिए तक पहुँचने के साथमेमोरी एसोसिएशन में मान लीजिए कि यह सही है, मैं कभी भी उस व्यवहार को क्यों नहीं चाहूंगा? मैं सिर्फ एसोसिएशन पर
inverse_of:
क्यों नहीं रखूंगा?
तो इसका मतलब यह है कि अगर मैं t.dungeon.level = 10 (d.level = 10 के बजाय) कहने के लिए थे, कि d.level भी अपडेट नहीं हैं अगर मैं उलटा हुआ हूं क्योंकि इसे अनदेखा किया गया था? और आम तौर पर, संग्रह के सदस्य को अपडेट करने से उस सदस्य के अन्य उदाहरणों को सिंक नहीं किया जाएगा? लेकिन यह अभी भी हर जगह उलटा करने में कोई समस्या नहीं प्रतीत होता है, कम से कम उम्मीद है कि वे अंततः इसका समर्थन करते हैं, है ना? – bdwain
@bdwain यह मेरे लिए बहुत दिलचस्प है, क्योंकि मैं हमेशा सोचता हूं कि रेल ने इस 'inverse_of' रिश्ते को स्वचालित रूप से अनुमानित किया है (यदि नाम मिलान किए गए हैं)। हाल ही में इस पर आने के बाद (एक मॉडल पर सत्यापन करते समय 'accepts_nested_attributes_for' संबंधित मॉडल), मुझे आपके निष्कर्ष से सहमत होना होगा: उदारता से' inverse_of' का उपयोग करें। मैं किसी भी कारण की कल्पना नहीं कर सकता। – steve