Мы надеемся, что в редких случаях вам понадобится отключить фильтр before_save
с помощью attr_accessor
или переместить его в блок after_save
, чтобы избежать зацикливания. Например,
:
class One < ActiveRecord::Base
attr_accessor :not_doing_stuff
before_save :do_stuff,
:unless => :not_doing_stuff
private
def do_stuff
two = Two.find(8)
two.field2 = 'Value'
two.save!
end
end
Вы бы отключили триггер, по крайней мере, на одном из них:
class Two < ActiveRecord::Base
before_save :do_stuff
private
def do_stuff
one = One.find(7)
one.not_doing_stuff = true
one.field2 = 'SomeValue'
one.save!
end
end
Подобные вещи всегда очень уродливы, поэтому старайтесь избегать этого, если только не вспомнитеДругого пути нет.Если вам это нужно, убедитесь, что вы написали достаточно модульных тестов, чтобы гарантировать, что он не будет блокироваться в бесконечный цикл при некоторых крайних случаях.