मान लें कि हमारे पास मानक पोस्ट & टिप्पणी मॉडल है, जिसमें पोस्ट accepts_nested_attributes_for :commments
और :autosave => true
सेट है।रेल: मैं नए रिकॉर्ड के नेस्टेड एसोसिएशन के मूल मॉडल तक कैसे पहुंच सकता हूं?
हम कुछ नई टिप्पणी के साथ एक साथ एक नया पद बना सकते हैं, जैसे:
@post = Post.new :subject => 'foo'
@post.comments.build :text => 'bar'
@post.comments.first # returns the new comment 'bar'
@post.comments.first.post # returns nil :(
@post.save # saves both post and comments simultaneously, in a transaction etc
@post.comments.first # returns the comment 'bar'
@post.comments.first.post # returns the post 'foo'
हालांकि, मैं टिप्पणी के भीतर से (उदाहरण के लिए अपने before_save या सत्यापन कार्यों से)
के बीच भेद करने में सक्षम होने की जरूरत है- इस टिप्पणी एक पोस्ट (जो अमान्य है)
- इस टिप्पणी एक न सहेजा गया पोस्ट (जो मान्य है) से जुड़ा हुआ है से जुड़ी नहीं है
दुर्भाग्यवश, टिप्पणी से केवल self.post
पर कॉल करना काम नहीं करता है, क्योंकि उपर्युक्त, यह सहेजने के बाद तक शून्य हो जाता है। बेशक कॉलबैक में, मुझे @post तक पहुंच नहीं है (केवल नहीं, केवल प्रश्न में टिप्पणी के स्वयं के लिए।
तो: मैं उस नेस्टेड एसोसिएशन मॉडल के परिप्रेक्ष्य से, नए रिकॉर्ड के घोंसले वाले संगठनों के मूल मॉडल तक कैसे पहुंच सकता हूं?
(एफडब्ल्यूआईडब्ल्यू, वास्तविक नमूना जिसका उपयोग मैं कर रहा हूं, लोगों को नग्न "टिप्पणी" बनाने की अनुमति देता है और फिर स्वचालित रूप से इसे "पोस्ट" बनाने के लिए तैयार कर देगा यदि कोई पहले से नहीं है। मैंने इसे सरल बना दिया है उदाहरण के लिए यह अप्रासंगिक तरीकों से मेरे कोड के लिए विशिष्ट नहीं है।)
यह कैसे करेगा? आप parent_id कॉलम सेट नहीं करना चाहते हैं, तो आपको बच्चे पर कुछ छिपी हुई संपत्तियां जोड़नी होंगी? – MattMcKnight
आप अपेक्षित _ids सेट किए बिना एक विशेषता (उदा। माता-पिता, बच्चे) सेट कर सकते हैं। इस तरह यह वर्तमान में नेस्टेड मॉडल बचत करता है - इसमें अभी भी रिकर्सिव नहीं होने की यह समस्या है। – Sai
@Sai पोस्ट किए गए लिंक का पालन करते हुए, मैं देख सकता हूं कि यह 'inverse_of' विकल्प का उपयोग करके हासिल किया जा सकता है। – artificis