你可以手动"触发" Ruby on Rails中的回调?

时间:2014-09-29 22:41:07

标签: ruby-on-rails ruby

我正在尝试在方法中手动运行所有回调方法。例如,我想在我的模型中运行所有“before_destroy”方法。

有没有办法手动触发?例如,像:

def some_method
  # ...
  trigger(:before_destroy)
end

然后将运行我用“before_destroy:....”

声明的所有方法

有什么想法吗?

2 个答案:

答案 0 :(得分:10)

如果您乐意同时执行以下操作:在挂钩之前和之后,您可以尝试run_callbacks。 来自the docs

run_callbacks(kind, &block)

运行给定事件的回调。

按照它们设置的顺序调用前后回调,产生块(如果给定一个),然后以相反的顺序运行after回调。

如果回调链暂停,则返回false。否则返回块的结果,如果没有给出块,则返回true。

run_callbacks :save do
  save
end

答案 1 :(得分:-3)

class Foo < ActiveRecord::Base

  def destroy_method_1
  end

  def destroy_method_2
  end

  before_destroy :destroy_method_1, :destroy_method_2

  DESTROY_METHODS = [:destroy_method_1, :destroy_method_2]

  def some_method
    DESTROY_METHODS.each {|m| send(m) }
  end
end