मेरी मूल कक्षा कभी-कभी बच्चे द्वारा after_save
कॉलबैक में अपने सभी बच्चों को लोड नहीं कर रही है।रेल एसोसिएशन सही ढंग से लोड नहीं हो रहा है
class Parent < ActiveRecord::Base
has_many :children
def update_something
# explained below
end
end
class Child < ActiveRecord::Base
belongs_to :parent
after_save :tell_parent_to_update
def tell_parent_to_update
parent.update_something
end
end
मैं जो सिर्फ 2 बातें की जाँच करता है एक परीक्षण मैं इस पर चल रहा हूँ, है:
मैं दो मॉडल है। parent.children.count
और parent.children.length
। दोनों होना चाहिए 4. मुझे एहसास है कि गिनती कभी-कभी अलग होती है, लेकिन (जहां तक मुझे पता है) यह यहां नहीं होना चाहिए।
अगर मैं update_something
परिभाषित बस दोहराना चाहते children
से अधिक:
def update_something
children.each do |child|
end
end
परीक्षण विफल रहता है - पाश एक बार निष्पादित करेंगे (और एक भी बच्चे की सरणी वापस आ जाएगी - पहलेchild
बनाई गई) ।
अन्यथा, मैं तब तक कोई कोड डाल सकता हूं जब तक यह children
का उल्लेख नहीं करता है और यह काम करेगा। यह बच्चों के लिए कॉल की तरह है जो एसोसिएशन को गलत चीज़ लोड करने का कारण बन रहा है।
एक रीलोड जबरदस्ती यह ठीक करता है:
def update_something
children(true).each do |child|
end
end
लेकिन इस hacky है और मैं नहीं बल्कि यदि संभव हो तो जड़ इस मुद्दे को ठीक होगा।
क्या यह मेरी बग, या रेल बग है (और यदि ऐसा है तो मैं इसे पाने के लिए कुछ कर सकता हूं)?
मुझे शक है कि यह महत्वपूर्ण है लेकिन यह sqlite3 का उपयोग कर एक परीक्षण वातावरण है। हालांकि यह एक देव वातावरण में भी विफल हो जाएगा यदि मैं एक एकल कंसोल सत्र में रिकॉर्ड्स बना और परीक्षण करता हूं।
'बच्चे.चलो करते हैं | बच्चे | 'या' बच्चे.चलो करते हैं | बच्चे | '? –
शायद कीवर्ड के साथ कुछ करने के लिए, बस अनुमान लगाया। – Nithin
मैंने पहले भी सोचा था, लेकिन वास्तविक कोड में यह अब बहुत अलग है, और मॉडल/विधियों के वास्तविक नाम बेहद डोमेन-विशिष्ट हैं और दुर्भाग्यवश कीवर्ड नहीं हैं –