2011-06-06 4 views
161

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

उत्तर

330

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

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

    डेटाबेस सम्मिलित
  7. +०१२३५१६४१०६१
  8. after_create
  9. after_save

अद्यतन संचालन, बिल्कुल वैसा ही सेट है सिवाय update बजाय create हर जगह (और अद्यतनके बजाय सम्मिलित) पढ़ें।

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

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

+21

['pre_validation_on_create' और' after_validation_on_create' रेल 3 के रूप में हटा दिए जाते हैं] (http://guides.rubyonrails.org/v3.2.9/active_record_validations_callbacks.h tml # उपलब्ध-कॉलबैक), इसके बजाय विकल्प ': on =>: create' के साथ क्रमशः 'pre_validation' और' after_validation' का उपयोग करें। – Sun

+0

आप 'after_save' या' after_create' का उपयोग करते समय अभी बनाए गए रिकॉर्ड का संदर्भ कैसे लेंगे? – bcackerman

+0

@bcackerman - 'after_save' या' after_create 'कॉलबैक में,' self' वह रिकॉर्ड है जो अभी सहेजा गया था, क्योंकि यह सहेजने के बाद मौजूद है। इसमें 'आईडी', 'create_at', 'update_at' जैसे स्वत: जेनरेटेड फ़ील्ड शामिल हैं। – Chowlett

119

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

before_create केवल सृजन से पहले। तो केवल नई वस्तुओं (कार्रवाई बनाने)

2

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

के लिए कभी-कभी आप कॉलबैक के आदेश

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

+5

'before_save: on =>: create' काम नहीं करता है (कम से कम रेल 3.2 पर) – cutalion

+0

आप इसका उपयोग कर सकते हैं:' before_save: gener_api_key,: if =>: new_record? ' –

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