【发布时间】:2018-07-11 22:51:14
【问题描述】:
是否可以确定代码是否在某个块内运行?下面描述了我的用例,其中混入了一些伪代码,这证明了我的想法。欢迎任何建议!当从 WatchTower.bulk_operation do; end 中调用模型上的任何操作时,我希望模型上的块不运行。
# watch_tower.rb
module WatchTower
extend ActiveSupport::Concern
class_methods do
def not_safe_for_bulk
yield if block_given? && # not called from within bulk_operation block
end
end
def self.bulk_operation
yield if block_given?
end
end
# Inside some other file, callbacks on number shouldn't run
WatchTower.bulk_operation do
5.times { Number.create }
end
# Inside some other file, callbacks on number SHOULD run
Number.create
# number.rb
class Number < ActiveRecord::Base
include WatchTower
not_safe_for_bulk do
after_commit :something_destructive
end
end
【问题讨论】:
-
您能否设置布尔值并在块中将其设置为 true,并检查该值是否设置为 true,这将是您的块运行的指标。
标签: ruby-on-rails ruby activesupport-concern