ruby on rails ActiveRecord कॉलबैक को कैसे छोड़ें?




ruby-on-rails rails-activerecord (4)

यह आपके सत्यापन को छोड़ देगा:

vote.save(:validate => false)

here अधिक जानकारी

अपने कॉलबैक और सत्यापन को छोड़ने के लिए, आप update_column v (3.1), या update_all का उपयोग कर सकते हैं

vote = Vote.first
vote.update_column(:subject, 'CallBacks')

जाहिर है यह केवल ActiveRecord 3.1 के साथ काम करता है

या:

Vote.where('id = ?', YourID).update_all(:subject => 'CallBacks')

अंत में आपके पास अंततः विकल्प भी है और यह हमेशा कुछ भी छोड़ देगा:

execute "UPDATE votes SET subject = 'CallBacks' WHERE id = YourID"

ठीक है आखिरी एक यह इतना सुंदर नहीं है।

संभावित डुप्लिकेट:
मैं ActiveRecord कॉलबैक चलाने से कैसे बच सकता हूं?

मेरे पास इस तरह का मॉडल है

class Vote < ActiveRecord::Base  
    after_save :add_points_to_user

    .....
end

सहेजे जाने पर कॉलिंग add_points_to_user कॉल करने के लिए किसी भी तरह मॉडल को मजबूर करना संभव है? संभवतः ActiveRecord#delete जैसे कुछ ActiveRecord#destroy ?


रेल 2 के लिए, लेकिन रेल 3 नहीं, आप इनका उपयोग कर सकते हैं:

object.send(:create_without_callbacks)
object.send(:update_without_callbacks)

निम्नलिखित रेल 2, रेल 3 और रेल पर लागू होता है 4:

http://guides.rubyonrails.org/v3.2.13/active_record_validations_callbacks.html#skipping-callbacks

यह उन तरीकों की एक सूची प्रदान करता है जो कॉलबैक छोड़ते हैं, यह बताते हुए कि सावधानीपूर्वक विचार किए बिना उनका उपयोग करना खतरनाक क्यों है। क्रिएटिव कॉमन्स एट्रिब्यूशन-शेयर एलाइक 3.0 लाइसेंस के प्रावधानों के तहत यहां दोबारा मुद्रित किया गया।

12 कॉलबैक छोड़ना

सत्यापन के साथ ही, कॉलबैक छोड़ना भी संभव है। सावधानी के साथ इन विधियों का उपयोग किया जाना चाहिए, हालांकि, कॉलबैक में महत्वपूर्ण व्यावसायिक नियम और आवेदन तर्क रखा जा सकता है। संभावित प्रभावों को समझे बिना उन्हें छोड़कर अमान्य डेटा हो सकता है।

  • घटती
  • decrement_counter
  • हटाना
  • सभी हटा दो
  • find_by_sql
  • वेतन वृद्धि
  • increment_counter
  • टॉगल
  • स्पर्श
  • update_column
  • सब अद्यतित
  • update_counters

रेल 3 के लिए, ActiveSupport::Callbacks आपको आवश्यक नियंत्रण देता है। मुझे डेटा एकीकरण परिदृश्य में एक ही चुनौती का सामना करना पड़ रहा था, जहां आम तौर पर वांछनीय-कॉलबैक को ब्रश करने की आवश्यकता होती थी। आप_callbacks en-masse को रीसेट कर सकते हैं, या समझदारी से अक्षम करने के लिए skip_callback का उपयोग कर सकते हैं, इस तरह:

Vote.skip_callback(:save, :after, :add_points_to_user)

.. जिसके बाद आप वोट उदाहरणों पर संचालित कर सकते हैं: add_points_to_user अवरुद्ध







rails-activerecord