2012-03-09 17 views
12

मेरे पास User और UserProfile उपयोगकर्ता का उपयोगकर्ता has_one :user_profile और उपयोगकर्ता प्रोफाइल belongs_to :user के साथ एक सरल सेट अप है।रेल - कॉलबैक और नेस्टेड विशेषताओं को बनाने के बाद निष्पादन अनुक्रम

लेकिन मैं अपने सिर को लपेटने में असमर्थ हूं कि कैसे रेल ने after_create कॉलबैक और accepts_nested_attributes_for के निष्पादन आदेश को मेरे मॉडल में परिभाषित किया है। आइए इन दो मामलों पर विचार करें।

केस 1:

class User < ActiveRecord::Base 
    has_one :user_profile 
    accepts_nested_attributes_for :user_profile 
    after_create :test_test 
end 

अब, अगर मैं (साथ user_profile_attributes भी हैश) एक उपयोगकर्ता बना कंसोल के माध्यम से, after_create कॉलबैक उपयोगकर्ता के बाद शुरू हो रहा है और इसके उपयोगकर्ता प्रोफ़ाइल बनाया जाता है।

केस 2: after_create शीर्ष पर रखा गया है, के बाद एक उपयोगकर्ता बनाया गया है

class User < ActiveRecord::Base 
    after_create :test_test 
    has_one :user_profile 
    accepts_nested_attributes_for :user_profile 
end 

कॉलबैक शुरू हो रहा है, लेकिन एक उपयोगकर्ता प्रोफ़ाइल बनाने से पहले है हैं।

क्या यह काम करने की उम्मीद है। रेल यहाँ आंतरिक रूप से क्या करते हैं? निष्पादन अनुक्रम बस कोड के क्रम द्वारा निर्धारित किया गया है?

मैं इसे गहराई से खोदने या डीबग करने के लिए कहां से शुरू करूं?

+1

मैं इसे फिर से जांचूंगा, कॉलबैक के रूप में कोड के क्रम में निष्पादन आदेश के साथ कुछ भी नहीं है .. – Rabbott

+0

@Rabbott - मुझे सराहना है! – prasvin

+0

'inverse_of' का उपयोग निर्भरता को हल करने और सहेजने या सहेजने पर समस्याओं को सहेजने के लिए उपयोगी हो सकता है। जैसे 'has_one: user_profile, inverse_of:: उपयोगकर्ता' – ybart

उत्तर

10

आपके मॉडल में घोषणाओं का क्रम कोड के निष्पादन आदेश पर असर डाल सकता है। यह विभिन्न अजीब चीजों के लिए एक स्रोत है। (उदाहरण के लिए, वर्तमान में कॉलबैक परिभाषाएं और has_and_belongs_to_many एसोसिएशन ऑर्डर निर्भर हैं: https://github.com/rails/rails/pull/8674)

समस्या को डीबग करने के लिए आपको रेल स्रोत ब्राउज़ करने की आवश्यकता है। चूंकि आपकी समस्या निष्पादन आदेश, कॉलबैक और नेस्टेड गुण मैं शुरू होगा के साथ क्या करना है पर पढ़कर:

यह आपको करने के लिए आवश्यक पृष्ठभूमि देता है गहरी खुदाई। आप देखेंगे कि accepts_nested_attributes_foradd_autosave_association_callbackshttps://github.com/rails/rails/blob/master/activerecord/lib/active_record/autosave_association.rb#L173 पर कॉल करता है यह विधि after_create कॉलबैक जोड़ती है और जहां तक ​​मुझे पता है कि परिभाषा के क्रम में कॉलबैक निष्पादित किए जाते हैं।

+2

धन्यवाद। यह वही था जो मैं चला रहा था। मेरे मॉडल के बाद कॉलबैक चल रहा था और उन्हें__नी परिभाषाओं से पहले रखा गया था। बाद में मैं अद्यतन_ट्रिब्यूट (कुछ मामलों में) के साथ एक विशेषता अद्यतन कर रहा था, जिसके बाद शेष है Imany श्रृंखला को अपडेट करने में असफल रहा जिससे मेरा है_मनी: रिश्तों के माध्यम से जो कुछ भी बचा नहीं रहा था। बाद में बढ़ने के बाद मेरी रिश्ते की परिभाषाओं ने इस मुद्दे को हल किया। पागल। धन्यवाद!!! –

+0

इस पोस्ट में चर्चा की गई समस्या इतनी अस्पष्ट नहीं है?मुझे इसके द्वारा काटा गया था, और मैंने ऊपर वर्णित अनुसार, मेरे मॉडल में है_मनी और accepts_nested_attributes_ परिभाषाओं के लिए 'after_update' कॉलबैक परिभाषा को स्थानांतरित करके समस्या को ठीक किया है। –

+0

@ डॉनफेलकर हां, मेरे 'ac_create' को मेरे' accepts_nested_attributes' के नीचे ले जाने के लिए भी मेरे लिए तय किया गया, धन्यवाद। – eggie5

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

  • कोई संबंधित समस्या नहीं^_^