रूबी ऑन कॉलबैक, रूबी के बीच अंतर क्या है: इससे पहले: और फिर: इससे पहले?


183

क्या आप विस्तार से बता सकते हैं कि रेल कॉलबैक में रूबी :before_saveऔर :before_createरूबी के सत्यापन के साथ क्या करना है? क्या सत्यापन के बाद :before_saveया होता है :before_create?

जवाबों:


363

रेल के तहत एक निर्माण कार्य में, डेटाबेस ऑपरेशन से पहले छह कॉलबैक होते हैं, और दो के बाद। आदेश में, ये हैं:

  1. before_validation
  2. before_validation_on_create
  3. after_validation
  4. after_validation_on_create
  5. before_save
  6. before_create

    DATABASE INSERT
  7. after_create
  8. after_save

अपडेट ऑपरेशंस बिल्कुल एक जैसे सेट होते हैं, हर जगह के updateबजाय create(और INSERT के बजाय UPDATE ) को छोड़कर ।

इस से, आप देख सकते हैं कि मान्यता से पहले किया जाता है before_saveऔर before_createकॉलबैक।

before_saveपहले थोड़ा होता है before_create। मेरे ज्ञान का सबसे अच्छा करने के लिए, उनके बीच कुछ भी नहीं होता है; लेकिन before_saveअपडेट ऑपरेशंस पर भी फायर करेगा, जबकि before_createकेवल क्रिएट्स पर फायर करेगा।


27
before_validation_on_createऔर after_validation_on_createरेल 3 के रूप में हटा दिया जाता है , बजाय विकल्प के साथ उपयोग before_validationऔर after_validationक्रमशः :on => :create
सूर्य

आप उस रिकॉर्ड का उल्लेख कैसे करेंगे जो उपयोग करते समय after_saveया उसके बाद बनाया गया था after_create?
bcackerman

@bcackerman - after_saveया after_createकॉलबैक में, selfवह रिकॉर्ड है जिसे अभी बचाया गया था, क्योंकि यह सेव के बाद मौजूद है। शामिल ऑटोजनरेटेड क्षेत्रों की तरह है कि id, created_at, updated_at
चौलेट

यह भी याद रखें before_createकि डेटाबेस में सहेजे जा रहे एक नए ऑब्जेक्ट को संदर्भित करता है, न कि वास्तविक createविधि को बुलाया जा रहा है। इस प्रकार, before_createअभी भी saveविधि से निकाल दिया जा सकता है ।
स्टीव

1
@Rad - एर, नहीं? डॉक्स अभी भी before_save3rd, और before_create5th को सूचीबद्ध करता है ।
चौलेट

136

before_saveकहा जाता है कि हर बार किसी वस्तु को बचाया जाता है। तो नई और मौजूदा वस्तुओं के लिए। (कार्रवाई बनाएं और अपडेट करें)

before_createकेवल निर्माण से पहले। तो केवल नई वस्तुओं के लिए (कार्रवाई बनाएँ)


3

before_create बनाम before_save :on => :create

कभी-कभी आपको कॉलबैक के आदेश से सावधान रहना होगा

अधिक जानकारी के लिए यहां देखें: http://pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc/


5
before_save :on => :createकाम नहीं करता (कम से कम रेल पर 3.2)
कटैलियन

1
आप उपयोग कर सकते हैं:before_save :generate_api_key, :if => :new_record?
कास्पर ग्रुबे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.