क्या आप विस्तार से बता सकते हैं कि रेल कॉलबैक में रूबी :before_saveऔर :before_createरूबी के सत्यापन के साथ क्या करना है? क्या सत्यापन के बाद :before_saveया होता है :before_create?
क्या आप विस्तार से बता सकते हैं कि रेल कॉलबैक में रूबी :before_saveऔर :before_createरूबी के सत्यापन के साथ क्या करना है? क्या सत्यापन के बाद :before_saveया होता है :before_create?
जवाबों:
रेल के तहत एक निर्माण कार्य में, डेटाबेस ऑपरेशन से पहले छह कॉलबैक होते हैं, और दो के बाद। आदेश में, ये हैं:
before_validationbefore_validation_on_createafter_validationafter_validation_on_createbefore_savebefore_create
after_createafter_saveअपडेट ऑपरेशंस बिल्कुल एक जैसे सेट होते हैं, हर जगह के updateबजाय create(और INSERT के बजाय UPDATE ) को छोड़कर ।
इस से, आप देख सकते हैं कि मान्यता से पहले किया जाता है before_saveऔर before_createकॉलबैक।
before_saveपहले थोड़ा होता है before_create। मेरे ज्ञान का सबसे अच्छा करने के लिए, उनके बीच कुछ भी नहीं होता है; लेकिन before_saveअपडेट ऑपरेशंस पर भी फायर करेगा, जबकि before_createकेवल क्रिएट्स पर फायर करेगा।
after_saveया उसके बाद बनाया गया था after_create?
after_saveया after_createकॉलबैक में, selfवह रिकॉर्ड है जिसे अभी बचाया गया था, क्योंकि यह सेव के बाद मौजूद है। शामिल ऑटोजनरेटेड क्षेत्रों की तरह है कि id, created_at, updated_at।
before_createकि डेटाबेस में सहेजे जा रहे एक नए ऑब्जेक्ट को संदर्भित करता है, न कि वास्तविक createविधि को बुलाया जा रहा है। इस प्रकार, before_createअभी भी saveविधि से निकाल दिया जा सकता है ।
before_save3rd, और before_create5th को सूचीबद्ध करता है ।
before_saveकहा जाता है कि हर बार किसी वस्तु को बचाया जाता है। तो नई और मौजूदा वस्तुओं के लिए। (कार्रवाई बनाएं और अपडेट करें)
before_createकेवल निर्माण से पहले। तो केवल नई वस्तुओं के लिए (कार्रवाई बनाएँ)
before_create बनाम before_save :on => :create
कभी-कभी आपको कॉलबैक के आदेश से सावधान रहना होगा
अधिक जानकारी के लिए यहां देखें:
http://pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc/
before_save :on => :createकाम नहीं करता (कम से कम रेल पर 3.2)
before_save :generate_api_key, :if => :new_record?
before_validation_on_createऔरafter_validation_on_createरेल 3 के रूप में हटा दिया जाता है , बजाय विकल्प के साथ उपयोगbefore_validationऔरafter_validationक्रमशः:on => :create।