मेरे पास दो मॉडल हैं।
- Parent
has_manyChildren
;
- Parent
accepts_nested_attributes_forChildren
;नेस्टेड मॉडल और अभिभावक सत्यापन
class Parent < ActiveRecord::Base
has_many :children, :dependent => :destroy
accepts_nested_attributes_for :children, :allow_destroy => true
validates :children, :presence => true
end
class Child < ActiveRecord::Base
belongs_to :parent
end
मैं मान्यता का उपयोग हर माता पिता के लिए बच्चों की उपस्थिति की पुष्टि करने के, तो मैं बच्चों के बिना माता-पिता नहीं बचा सकता है।
parent = Parent.new :name => "Jose"
parent.save
#=> false
parent.children_attributes = [{:name => "Pedro"}, {:name => "Emmy"}]
parent.save
#=> true
सत्यापन कार्य। फिर हम _destroy
विशेषता के माध्यम से बच्चों को नष्ट कर देगा:
parent.children_attributes = {"0" => {:id => 0, :_destroy => true}}
parent.save
#=> true !!!
parent.reload.children
#=> []
तो मैं नेस्ट रूपों और प्रमाणीकरण में सफल होगा के माध्यम से सभी बच्चों को नष्ट कर सकते हैं।
असल में ऐसा होता है क्योंकि के बाद मैं _delete
के माध्यम से मेरे माता पिता से बच्चे को हटाने के लिए, बच्चों पद्धति अभी भी वस्तु को नष्ट कर दिया रिटर्न से पहले मैं इसे फिर से लोड है, तो सत्यापन पारित कर दिया:
parent.children_attributes = {"0" => {:id => 0, :_destroy => true}}
parent.save
#=> true !!!
parent.children
#=> #<Child id:1 ...> # It's actually deleted
parent.reload.children
#=> []
यह बग है?
प्रश्न क्या है। प्रश्न इसे सुधारने का सबसे अच्छा समाधान है। मेरा दृष्टिकोण 0_पर पहले_destroy फ़िल्टर को जोड़ने के लिए यह जांचने के लिए है कि यह आखिरी है या नहीं। लेकिन यह प्रणाली जटिल बनाता है।
फिर भी यह बेहतर पर 'Child' पक्ष :) धन्यवाद – fl00r
और' marked_for_destruction के लिए धन्यवाद मान्य तो है? ' – fl00r
यह मान्यता पद्धति अभी भी रेल के रूप में 3.0.6 – astjohn