2010-02-09 8 views
7

अगर मैं दो मॉडल हैं:क्या मुख्य ऑब्जेक्ट को सहेजते समय ActiveRecord एक related_to एसोसिएशन को सहेजता है?

class Post < ActiveRecord::Base 
    belongs_to :user 
end 

और

class User < ActiveRecord::Base 
    has_many :posts 
end 

अगर मैं कार्य करें:

post = Post.new 
user = User.new 
post.user = user 
post.save 

करता है उपयोगकर्ता के रूप में अच्छी तरह से सहेज और प्राथमिक कुंजी ठीक से post में सौंपा ' एस user_id फ़ील्ड?

उत्तर

16

ActiveRecord belongs_to एसोसिएशन में मूल मॉडल के साथ स्वत: सहेजने की क्षमता है, लेकिन कार्यक्षमता डिफ़ॉल्ट रूप से बंद है। इसे सक्षम करने के लिए:

class Post < ActiveRecord::Base 
    belongs_to :user, :autosave => true 
end 
+2

अजीब। मैं पर कि झंडा ही बदल गया है, और कर ऊपर के रूप में अभी भी देता है मुझे '> post.errors # => # [" खाली नहीं हो सकता "]}>' और 'user.new_record? # => सच'। क्या मैं कुछ भूल रहा हूँ? – hsribei

+4

असल में कार्यक्षमता ** ** डिफ़ॉल्ट रूप से ** है। इसे बंद करने के लिए आपको इसे गलत पर सेट करना होगा, अन्यथा सभी संगठन स्वचालित रूप से सहेजे जाएंगे। –

+0

@OdeeOdum: यह सच नहीं है, मुझे इस तरह की समस्या थी और ऑटोवॉव सेट करना: रेल में सच 3 ने इस मुद्दे को ठीक किया। –

7

मेरा मानना ​​है कि आप चाहते हैं:

class User < ActiveRecord::Base 
    has_many :posts, :autosave => true 
end 

दूसरे शब्दों में, जब एक उपयोगकर्ता रिकॉर्ड बचत, 'पदों के संघ के दूसरे पक्ष पर सभी रिकॉर्ड बाहर की तलाश करने और उन्हें बचाने के लिए ।

0

belongs_to API documentation कहते हैं (रेल 4.2.1):

:autosave

अगर सही है तो हमेशा जुड़े वस्तु को बचाने या उसे नष्ट करता है, तो विनाश के लिए चिह्नित किया है, जब माता-पिता वस्तु बचत।

यदि गलत है, तो संबंधित वस्तु को कभी भी सहेजें या नष्ट न करें।

डिफ़ॉल्ट रूप से, केवल ऑब्जेक्ट को सहेज लें यदि यह एक नया रिकॉर्ड है।

नोट करें कि accepts_nested_attributes_for सेट: सत्य के लिए स्वत: सहेजना।

आपके मामले में उपयोगकर्ता नया रिकॉर्ड है इसलिए यह स्वतः सहेजा जाएगा।

accepts_nested_attributes_for के बारे में अंतिम वाक्य भी कई लोगों द्वारा याद किया जाता है।

संबंधित मुद्दे