मैं ActiveRecord कॉलबैक चलाने से कैसे बच सकता हूं?


142

मेरे पास कुछ मॉडल हैं जिनके पास बाद में कॉलबैक है। आमतौर पर यह ठीक है, लेकिन कुछ स्थितियों में, जैसे विकास डेटा बनाते समय, मैं कॉलबैक चलाने के बिना मॉडल को सहेजना चाहता हूं। क्या ऐसा करने का एक सरल तरीका है? कुछ के समान ...

Person#save( :run_callbacks => false )

या

Person#save_without_callbacks

मैंने रेल डॉक्स में देखा और कुछ भी नहीं पाया। हालांकि मेरे अनुभव में रेल डॉक्स हमेशा पूरी कहानी नहीं बताते हैं।

अपडेट करें

मुझे एक ब्लॉग पोस्ट मिली जो बताती है कि आप इस तरह से एक मॉडल से कॉलबैक कैसे निकाल सकते हैं:

Foo.after_save.clear

मुझे नहीं पता था कि वह तरीका कहाँ से प्रलेखित है लेकिन यह काम करने लगता है।


8
यदि आप एक कॉलबैक में कुछ विनाशकारी या महंगे (जैसे ईमेल भेजना) कर रहे हैं तो मैं इसे बाहर स्थानांतरित करने और इसे नियंत्रक या कहीं और से अलग करने की सलाह देता हूं। इस तरह से आप "गलती से" इसे विकास में ट्रिगर नहीं करेंगे, आदि
ryanb

2
आपके द्वारा स्वीकृत समाधान मेरे लिए काम नहीं कर रहा है। मैं रेल उपयोग कर रहा हूँ 3. मैं इस तरह एक त्रुटि हो रही है: - # के लिए 'अपरिभाषित विधि `update_without_callbacks <उपयोगकर्ता: 0x10ae9b848>
मोहित जैन

याया उस ब्लॉग पोस्ट ने काम किया ....
मोहित जैन

1
संबंधित प्रश्न: stackoverflow.com/questions/19449019/…
Allerin

Foo.after_save.clearसंपूर्ण मॉडल के लिए कॉलबैक नहीं निकाले जाएंगे? और फिर आप उन्हें पुनर्स्थापित करने का प्रस्ताव कैसे देते हैं?
जोशुआ पिंटर

जवाबों:


72

यह समाधान केवल रेल 2 है।

मैंने अभी इसकी जांच की है और मुझे लगता है कि मेरे पास एक समाधान है। दो ActiveRecord निजी विधियाँ हैं जिनका आप उपयोग कर सकते हैं:

update_without_callbacks
create_without_callbacks

आपको इन विधियों को कॉल करने के लिए सेंड का उपयोग करना होगा। उदाहरण:

p = Person.new(:name => 'foo')
p.send(:create_without_callbacks)

p = Person.find(1)
p.send(:update_without_callbacks)

यह निश्चित रूप से कुछ है जो आप केवल कंसोल में उपयोग करना चाहते हैं या कुछ यादृच्छिक परीक्षण कर रहे हैं। उम्मीद है की यह मदद करेगा!


7
यह मेरे लिए काम नहीं कर रहा है। मैं रेल उपयोग कर रहा हूँ 3. मैं इस तरह एक त्रुटि हो रही है: - # के लिए 'अपरिभाषित विधि `update_without_callbacks <उपयोगकर्ता: 0x10ae9b848>
मोहित जैन

आपका सुझाव काम नहीं कर रहा है लेकिन अपडेट भाग में उल्लिखित ब्लॉग पोस्ट काम कर रहा है ..
मोहित जैन

यह सत्यापन को भी छोड़ देगा।
डैनियल पीटरज़च

मैं रेल के किसी भी संस्करण के लिए एक और समाधान है। यह हमारे लिए अच्छा काम करता है। मेरे ब्लॉग पोस्ट में इसे देखें: railsguides.net/2014/03/25/skip-callbacks-in-tests
ka8725

228

का प्रयोग करें update_column(रेल> = v3.1) या update_columns(रेल> = 4.0) कॉलबैक और सत्यापन को छोड़ने के लिए। इसके अलावा इन तरीकों के साथ, updated_atहै अपडेट किया गया।

#Rails >= v3.1 only
@person.update_column(:some_attribute, 'value')
#Rails >= v4.0 only
@person.update_columns(attributes)

http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-update_column

# 2: कॉलबैक स्किप करना जो ऑब्जेक्ट बनाते समय भी काम करता है

class Person < ActiveRecord::Base
  attr_accessor :skip_some_callbacks

  before_validation :do_something
  after_validation :do_something_else

  skip_callback :validation, :before, :do_something, if: :skip_some_callbacks
  skip_callback :validation, :after, :do_something_else, if: :skip_some_callbacks
end

person = Person.new(person_params)
person.skip_some_callbacks = true
person.save

2
ऐसा लगता है कि यह 2.x के साथ भी काम करता है, और ऐसे अन्य तरीकों का एक मेजबान है जो समान रूप से संचालित होते हैं: guide.rubyonrails.org/…
rogerdpack

16
इसका पता यह नहीं है :create_without_callbacks:( मैं उसके समान कुछ कैसे चला सकता हूं? (Rails2 में काम किया, Rails3 में हटा दिया गया)
niznabab

मान लें @personकि किसी नियंत्रक में एक चर है, तो इस समाधान का मतलब है कि आपके मॉडल वर्ग को पढ़ने वाले लोग कॉलबैक को समझ नहीं पाएंगे। वे देखेंगे after_create :something_coolऔर सोचेंगे "महान, बनाने के बाद कुछ अच्छा होता है!"। वास्तव में आपके मॉडल वर्ग को समझने के लिए, उन्हें आपके सभी नियंत्रकों के माध्यम से पकड़ना होगा, उन सभी छोटी जगहों की तलाश में जहां आपने तर्क को इंजेक्ट करने का निर्णय लिया है। मुझे यह पसंद नहीं है> ओ <;
जिग्गी

1
इस के बाद ठीक से चलाने के skip_callback ..., if: :skip_some_callbacksसाथ बदलें after_create ..., unless: :skip_some_callbacks
सकुराशिंकिन

28

अपडेट किया गया:

@ विक्रांत चौधरी का हल बेहतर लगता है:

#Rails >= v3.1 only
@person.update_column(:some_attribute, 'value')
#Rails >= v4.0 only
@person.update_columns(attributes)

मेरा मूल उत्तर:

इस लिंक को देखें: ActiveRecord कॉलबैक कैसे छोड़ें?

रेल 3 में,

मान लें कि हमारे पास एक वर्ग परिभाषा है:

class User < ActiveRecord::Base
  after_save :generate_nick_name
end 

Approach1:

User.send(:create_without_callbacks)
User.send(:update_without_callbacks)

दृष्टिकोण: जब आप उन्हें अपनी rspec फ़ाइलों या जो कुछ भी छोड़ना चाहते हैं, यह कोशिश करें:

User.skip_callback(:save, :after, :generate_nick_name)
User.create!()

नोट: एक बार ऐसा करने के बाद, यदि आप rspec वातावरण में नहीं हैं, तो आपको कॉलबैक रीसेट करना चाहिए:

User.set_callback(:save, :after, :generate_nick_name)

3.0.5 रेल पर मेरे लिए ठीक काम करता है


22

यदि लक्ष्य केवल कॉलबैक या सत्यापन के बिना एक रिकॉर्ड सम्मिलित करना है, और आप इसे अतिरिक्त रत्नों का सहारा लिए बिना करना चाहते हैं, सशर्त जांचों को जोड़ते हुए, रॉ एसक्यूएल का उपयोग करते हुए, या किसी भी तरह से अपने बाहर निकलने वाले कोड के साथ फ्यूजनिंग करें, तो "छाया" का उपयोग करने पर विचार करें ऑब्जेक्ट "आपके मौजूदा db टेबल की ओर इशारा करते हुए। इस तरह:

class ImportedPerson < ActiveRecord::Base
  self.table_name = 'people'
end

यह रेल के हर संस्करण के साथ काम करता है, थ्रेडसेफ़ है, और आपके मौजूदा कोड में कोई संशोधन नहीं होने के साथ सभी मान्यताओं और कॉलबैक को पूरी तरह से समाप्त कर देता है। आप अपने वास्तविक आयात से ठीक पहले उस वर्ग की घोषणा को टॉस कर सकते हैं, और आपको जाने के लिए अच्छा होना चाहिए। ऑब्जेक्ट डालने के लिए अपने नए वर्ग का उपयोग करना याद रखें, जैसे:

ImportedPerson.new( person_attributes )

4
सबसे अच्छा समाधान कभी। सुरुचिपूर्ण और सरल!
राफेल ओलिवेरा

1
यह मेरे लिए वास्तव में अच्छी तरह से काम करता था क्योंकि यह कुछ ऐसा था जो मैं केवल परीक्षण में करना चाहता था, डेटाबेस को "राज्य से पहले" अनुकरण करने के लिए, बिना मेरे उत्पादन मॉडल ऑब्जेक्ट को वैकल्पिक रूप से कॉलबैक को छोड़ने के लिए प्रदूषण के बिना।
डगलस लवेल्ल

1
अब तक का सबसे अच्छा जवाब
रोबोम

1
अपवर्तित क्योंकि यह दिखाता है कि कैसे काम करना है-आस-पास मौजूदा रेल बाधाओं के कारण और मुझे यह समझने में मदद मिली कि पूरी वस्तु एमवीसी वास्तव में कैसे काम करती है। इतना सरल और साफ।
माइकल श्मिट

20

रेल 3:

MyModel.send("_#{symbol}_callbacks") # list  
MyModel.reset_callbacks symbol # reset

11
अच्छा लगा। इसके अलावा MyModel.skip_callback (: create:,:: my_callback) सटीक नियंत्रण के लिए .. ActiveSupport :: Callbacks :: ClassMethods डॉक्स को सभी लोबंग के लिए देखें
tard

4
उपयोगी जानकारी: 'प्रतीक' में reset_callbacksनहीं :after_save, बल्कि है :saveapidock.com/rails/v3.0.9/ActiveSupport/Callbacks/ClassMethods/…
nessur

17

आप अपने व्यक्तिगत मॉडल में कुछ इस तरह की कोशिश कर सकते हैं:

after_save :something_cool, :unless => :skip_callbacks

def skip_callbacks
  ENV[RAILS_ENV] == 'development' # or something more complicated
end

संपादित करें: after_save एक प्रतीक नहीं है, लेकिन यह कम से कम 1,000 वीं बार मैंने इसे बनाने की कोशिश की है।


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

10

आप उपयोग कर सकते हैं update_columns :

User.first.update_columns({:name => "sebastian", :age => 25})

किसी ऑब्जेक्ट की दी गई विशेषताओं को अपडेट करता है, बिना कॉल सेव किए, इसलिए सत्यापन और कॉलबैक को छोड़ देता है।


7

सभी after_save कॉलबैक को रोकने का एकमात्र तरीका पहला एक रिटर्न गलत है।

शायद आप कुछ इस तरह की कोशिश कर सकते हैं:

class MyModel < ActiveRecord::Base
  attr_accessor :skip_after_save

  def after_save
    return false if @skip_after_save
    ... blah blah ...
  end
end

...

m = MyModel.new # ... etc etc
m.skip_after_save = true
m.save

1
मुझे प्रयास करना (अप्रकाशित) पसंद है। रोमांचक सवारी।
एडमांटीश

परीक्षण किया और यह काम करता है। मुझे लगता है कि यह एक बहुत अच्छा और साफ समाधान है, धन्यवाद!
कर्णकरण

6

रेल 2.3 में इसे हैंडल करने का एक तरीका दिखता है (चूंकि update_without_callbacks चला गया है, आदि), अद्यतन update_all का उपयोग करना होगा, जो कि उन तरीकों में से एक है जो कॉलबैक के खंड 12 के अनुसार मान्यताओं और कॉलबैक के लिए गाइड करता है।

यह भी ध्यान दें कि यदि आप अपने after_ callback में कुछ कर रहे हैं, तो यह कई संघों पर आधारित एक गणना करता है (यानी has_many assoc, जहाँ आप भी स्वीकार करते हैं_nested_attributes_for), आपको सहेज के भाग के रूप में, एसोसिएशन को पुनः लोड करना होगा। , इसके सदस्यों में से एक को हटा दिया गया था।


4

सबसे अधिक up-voted जवाब कुछ मामलों में भ्रामक लग सकता है।

ifयदि आप कॉलबैक को छोड़ना चाहते हैं, तो आप बस एक साधारण जांच का उपयोग कर सकते हैं :

after_save :set_title, if: -> { !new_record? && self.name_changed? }

3

https://gist.github.com/576546

बस इस बंदर-पैच को config / initializers / Skip_callbacks.rb में डंप करें

फिर

Project.skip_callbacks { @project.save }

या जैसे।

लेखक को सभी श्रेय


3

एक समाधान है कि एक मणि या प्लगइन के उपयोग के बिना रेल के सभी संस्करणों में काम करना चाहिए सीधे अद्यतन बयान जारी करने के लिए है। जैसे

ActiveRecord::Base.connection.execute "update table set foo = bar where id = #{self.id}"

यह इस बात पर निर्भर करता है कि (या हो सकता है) आपका विकल्प कितना जटिल है। इस से एक रिकार्ड पर जैसे को अपडेट करने में झंडे के लिए अच्छी तरह से काम के भीतर (कॉलबैक retriggering के बिना) एक after_save कॉलबैक।


निश्चित नहीं है कि नीचे की ओर क्यों, लेकिन मुझे अभी भी लगता है कि उपरोक्त उत्तर वैध है। ActiveRecord व्यवहार के साथ समस्याओं से बचने के लिए कभी-कभी ActiveRecord का उपयोग करने से बचने का सबसे अच्छा तरीका है।
डेव स्माइली

-1 का मुकाबला करने के लिए सिद्धांत पर उत्कीर्ण। हमारे पास बस एक उत्पादन मुद्दा था (इसके पीछे एक लंबी कहानी के साथ) जो हमें एक नया रिकॉर्ड (अपडेट नहीं) बनाने के लिए आवश्यक था और कॉलबैक फायरिंग भयावह थी। उपरोक्त सभी जवाब हैक हैं कि वे इसे स्वीकार करते हैं या नहीं और डीबी में जाना सबसे अच्छा समाधान था। इसके लिए वैध शर्तें हैं। हालांकि किसी को SQL इंजेक्शन से सावधान रहना चाहिए #{...}
sinisterchipmunk

2

मुझे रेल 4 के लिए एक समाधान की आवश्यकता थी, इसलिए मैं इसके साथ आया:

एप्लिकेशन / मॉडल / चिंताओं / save_without_callbacks.rb

module SaveWithoutCallbacks

  def self.included(base)
    base.const_set(:WithoutCallbacks,
      Class.new(ActiveRecord::Base) do
        self.table_name = base.table_name
      end
      )
  end

  def save_without_callbacks
    new_record? ? create_without_callbacks : update_without_callbacks
  end

  def create_without_callbacks
    plain_model = self.class.const_get(:WithoutCallbacks)
    plain_record = plain_model.create(self.attributes)
    self.id = plain_record.id
    self.created_at = Time.zone.now
    self.updated_at = Time.zone.now
    @new_record = false
    true
  end

  def update_without_callbacks
    update_attributes = attributes.except(self.class.primary_key)
    update_attributes['created_at'] = Time.zone.now
    update_attributes['updated_at'] = Time.zone.now
    update_columns update_attributes
  end

end

किसी भी मॉडल में:

include SaveWithoutCallbacks

तब आप कर सकते हो:

record.save_without_callbacks

या

Model::WithoutCallbacks.create(attributes)

1
# for rails 3
  if !ActiveRecord::Base.private_method_defined? :update_without_callbacks
    def update_without_callbacks
      attributes_with_values = arel_attributes_values(false, false, attribute_names)
      return false if attributes_with_values.empty?
      self.class.unscoped.where(self.class.arel_table[self.class.primary_key].eq(id)).arel.update(attributes_with_values)
    end
  end

1

इन बिंदुओं में से कोई भी without_callbacksप्लग इन नहीं करता कि आपको क्या चाहिए ...

class MyModel < ActiveRecord::Base
  before_save :do_something_before_save

  def after_save
    raise RuntimeError, "after_save called"
  end

  def do_something_before_save
    raise RuntimeError, "do_something_before_save called"
  end
end

o = MyModel.new
MyModel.without_callbacks(:before_save, :after_save) do
  o.save # no exceptions raised
end

http://github.com/cjbottaro/without_callbacks रेल्स 2.x के साथ काम करती है


1

मैंने एक प्लगइन लिखा है जो RAIL 3 में update_without_callbacks को लागू करता है:

http://github.com/dball/skip_activerecord_callbacks

सही समाधान, मुझे लगता है, पहली बार में कॉलबैक से बचने के लिए अपने मॉडल को फिर से लिखना है, लेकिन अगर यह निकट अवधि में अव्यावहारिक है, तो यह प्लगइन मदद कर सकता है।


1

यदि आप रेल का उपयोग कर रहे हैं 2. आप कॉलबैक और सत्यापन को चलाए बिना अपने कॉलम को अपडेट करने के लिए SQL क्वेरी का उपयोग कर सकते हैं।

YourModel.connection.execute("UPDATE your_models SET your_models.column_name=#{value} WHERE your_models.id=#{ym.id}")

मुझे लगता है कि इसे किसी भी रेल संस्करण में काम करना चाहिए।


1

जब मुझे कॉलबैक पर पूर्ण नियंत्रण की आवश्यकता होती है, तो मैं एक और विशेषता बनाता हूं जिसका उपयोग स्विच के रूप में किया जाता है। सरल और प्रभावी:

नमूना:

class MyModel < ActiveRecord::Base
  before_save :do_stuff, unless: :skip_do_stuff_callback
  attr_accessor :skip_do_stuff_callback

  def do_stuff
    puts 'do stuff callback'
  end
end

परीक्षा:

m = MyModel.new()

# Fire callbacks
m.save

# Without firing callbacks
m.skip_do_stuff_callback = true
m.save

# Fire callbacks again
m.skip_do_stuff_callback = false
m.save


1

आप डरपोक-बचाओ रत्न का उपयोग कर सकते हैं: https://rubygems.org/gems/sneaky-save

ध्यान दें कि यह बिना मान्यता के संघों को बचाने में मदद नहीं कर सकता है। यह 'create_at null नहीं हो सकता' त्रुटि को फेंकता है क्योंकि यह सीधे मॉडल के विपरीत sql क्वेरी को सम्मिलित करता है। इसे लागू करने के लिए, हमें db के सभी ऑटो जनरेट किए गए कॉलम को अपडेट करना होगा।


0

आप विकास में ऐसा क्यों कर पाएंगे? निश्चित रूप से इसका मतलब होगा कि आप अवैध डेटा के साथ अपने एप्लिकेशन का निर्माण कर रहे हैं और इस तरह यह अजीब व्यवहार करेगा और उत्पादन में अपेक्षा के अनुरूप नहीं होगा।

यदि आप डेटा के साथ अपने देव डीबी को आबाद करना चाहते हैं तो एक बेहतर कार्य एक रेक कार्य का निर्माण होगा जो मान्य डेटा के निर्माण के लिए फ़ेकर मणि का उपयोग करता है और इसे अपनी इच्छानुसार कई या कुछ रिकॉर्ड बनाते हुए db में आयात करता है, लेकिन यदि आप एड़ी हैं इस पर झुकें और मेरे पास एक अच्छा कारण है कि मुझे लगता है कि update_without_callbacks और create_without_callbacks ठीक काम करेंगे, लेकिन जब आप अपनी इच्छा से रेल को मोड़ने की कोशिश कर रहे हों, तो अपने आप से पूछें कि आपके पास एक अच्छा कारण है और यदि आप जो कर रहे हैं वह वास्तव में एक अच्छा विचार है।


मैं सत्यापन के बिना बचाने की कोशिश नहीं कर रहा हूं, बिना कॉलबैक के। मेरा ऐप कॉलसिस्टम का उपयोग करके कुछ स्थिर HTML को फाइलसिस्टम (एक CMS की तरह) लिखने के लिए उपयोग कर रहा है। मैं देव डेटा लोड करते समय ऐसा नहीं करना चाहता।
एथन

सिर्फ एक विचार था, मुझे लगता है कि जब भी अतीत में मैंने इस तरह का प्रश्न देखा है तो यह खराब कारणों से सामान लेने की कोशिश कर रहा है।
नाइटेकोडर

0

एक विकल्प में इस तरह की जोड़तोड़ के लिए एक अलग मॉडल है, एक ही तालिका का उपयोग कर:

class NoCallbacksModel < ActiveRecord::Base
  set_table_name 'table_name_of_model_that_has_callbacks'

  include CommonModelMethods # if there are
  :
  :

end

(एक ही दृष्टिकोण मान्यताओं को दरकिनार करने से चीजें आसान हो सकती हैं)

स्टीफ़न


0

कॉलबैक के बजाय सत्यापन हुक का उपयोग करने का एक और तरीका होगा। उदाहरण के लिए:

class Person < ActiveRecord::Base
  validate_on_create :do_something
  def do_something
    "something clever goes here"
  end
end

इस तरह आप डिफ़ॉल्ट रूप से do_something प्राप्त कर सकते हैं, लेकिन आप इसे आसानी से ओवरराइड कर सकते हैं:

@person = Person.new
@person.save(false)

3
यह एक बुरे विचार की तरह लगता है - आपको उनके इच्छित उद्देश्य के लिए चीजों का उपयोग करना चाहिए। आखिरी चीज जो आप चाहते हैं वह है साइड इफेक्ट्स के लिए आपकी मान्यता।
chug2k

0

ऐसा कुछ जो ActiveRecordबिना विकल्प के सभी संस्करणों के साथ काम करना चाहिए या विकल्प या एक्टिवरकॉर्ड तरीकों पर निर्भर करता है जो मौजूद हो सकते हैं या नहीं।

module PlainModel
  def self.included(base)
    plainclass = Class.new(ActiveRecord::Base) do
      self.table_name = base.table_name
    end
    base.const_set(:Plain, plainclass)
  end
end


# usage
class User < ActiveRecord::Base
  include PlainModel

  validates_presence_of :email
end

User.create(email: "")        # fail due to validation
User::Plain.create(email: "") # success. no validation, no callbacks

user = User::Plain.find(1)
user.email = ""
user.save

TLDR: एक ही टेबल पर "अलग-अलग एक्टिवरकार्ड मॉडल" का उपयोग करें


0

कस्टम कॉलबैक के लिए, a attr_accessorऔर a का उपयोग करेंunless

अपने मॉडल को इस प्रकार परिभाषित करें:

class Person << ActiveRecord::Base

  attr_accessor :skip_after_save_callbacks

  after_save :do_something, unless: :skip_after_save_callbacks

end

और फिर यदि आपको अपने द्वारा बताई गई after_saveकॉलबैक से टकराने के बिना रिकॉर्ड सहेजने की आवश्यकता है , तो skip_after_save_callbacksवर्चुअल विशेषता सेट करें true

person.skip_after_save_callbacks #=> nil
person.save # By default, this *will* call `do_something` after saving.

person.skip_after_save_callbacks = true
person.save # This *will not* call `do_something` after saving.

person.skip_after_save_callbacks = nil # Always good to return this value back to its default so you don't accidentally skip callbacks.

0

मुझे उसी समस्या का सामना करना पड़ा, जब मैं एक रेक टास्क चलाना चाहता था, लेकिन हर रिकॉर्ड के लिए कॉलबैक को चलाए बिना मैं बचत कर रहा था। यह मेरे लिए काम किया (रेल 5), और यह रेल के लगभग हर संस्करण के लिए काम करना चाहिए:

class MyModel < ApplicationRecord
  attr_accessor :skip_callbacks
  before_create :callback1
  before_update :callback2
  before_destroy :callback3

  private
  def callback1
    return true if @skip_callbacks
    puts "Runs callback1"
    # Your code
  end
  def callback2
    return true if @skip_callbacks
    puts "Runs callback2"
    # Your code
  end
  # Same for callback3 and so on....
end

जिस तरह से यह काम करता है वह यह है कि यह स्किप करने की विधि की पहली पंक्ति में सही है। यह सच है, इसलिए यह विधि के बाकी कोड को नहीं चलाता है। कॉलबैक को छोड़ने के लिए आपको बस स्किप करने की जरूरत है, बचत करने से पहले, इसे नष्ट करने से पहले, इसे नष्ट करना:

rec = MyModel.new() # Or Mymodel.find()
rec.skip_callbacks = true
rec.save

-6

सबसे साफ तरीका नहीं है, लेकिन आप कॉलबैक कोड को ऐसी स्थिति में लपेट सकते हैं जो रेल के वातावरण की जांच करता है।

if Rails.env == 'production'
  ...
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.