2012-07-17 8 views
25

मैं थोड़ी देर के लिए रेल स्रोत के माध्यम से जा रहा हूं, और मुझे नहीं लगता कि की सभी की सूची प्राप्त करने का एक बेहतर तरीका है: ActiveRecord::Callbacks::CALLBACKS - जो निरंतर सूची है।ActiveRecord कॉलबैक सूची

आप devise_invitable की तरह एक मणि है कि स्कोर :after और :before तो ActiveRecord::Callbacks::CALLBACKS काम नहीं करेगा साथ :invitation_accepted नामक एक नया कॉलबैक कहते उपयोग कर रहे हैं अर्थ।

क्या आप रेल मॉड्यूल खोलने और मॉडल मॉडल प्रति कॉल-बैक की एक आंतरिक सूची सुनिश्चित करने के अलावा, एक आसान फिक्स के बारे में जानते हैं?

उत्तर

37

आप सहेजने पर सभी कॉलबैक की सूची प्राप्त करने के लिए Model._save_callbacks पर कॉल कर सकते हैं। फिर आप इसे किस प्रकार की आवश्यकता के अनुसार फ़िल्टर कर सकते हैं उदा। :before या :after इस तरह:

Model._save_callbacks.select {|cb| cb.kind == :before} 

Model._destroy_callbacks आदि

+2

इसके अलावा: ._save_callbacks विधि से पहले, आप निम्न का उपयोग कर सकते http://apidock.com/rails/ActiveRecord/Callbacks –

3

नोट के लिए एक ही काम करता है कि अगर आप बस कॉलबैक ट्रिगर करना चाहते हैं, तो आप #run_callbacks(kind) विधि का उपयोग कर सकते हैं:

o = Order.find 123 # Created with SQL 
o.run_callbacks(:create) 
o.run_callbacks(:save) 
o.run_callbacks(:commit) 
17

docs कहें "कुल में उन्नीस कॉलबैक हैं" ... लेकिन वे यह नहीं कह रहे हैं कि वास्तव में उन सभी में से कौन सा है!

:after_initialize 
:after_find 
:after_touch 
:before_validation 
:after_validation 
:before_save 
:around_save 
:after_save 
:before_create 
:around_create 
:after_create 
:before_update 
:around_update 
:after_update 
:before_destroy 
:around_destroy 
:after_destroy 
:after_commit 
:after_rollback 
+0

ओह, और मैं सिर्फ वे खोज की है 'यहां सूचीबद्ध [यहां] (http://edgeguides.rubyonrails.org/ active_record_callbacks.html), गाइड में। फिर भी, मुझे आशा है कि यह उत्तर भविष्य में किसी को Google समय बचाएगा। – GMA

2

आप एक रेल संस्करण में काम कर रहे हैं:

जो लोग "सभी ActiveRecord कॉलबैक की सूची" Google पर की तरह मैंने किया था के लिए, यहाँ सूची (ActiveRecord::Callbacks::CALLBACKS का उपयोग कर प्रश्न में वर्णित के रूप से पाया जाता है) है अधिक विस्तृत जानकारी के लिये दस्तावेज की जांच

# list of callback_chain methods that return a CallbackChain 
Model.methods.select { |m| m.to_s.include? "callback" }.sort 

# get all methods in specific call back chain, like after_save 
Model.after_save_callback_chain.collect(&:method)