【问题标题】:Rails 3 run_callbacks methodRails 3 run_callbacks 方法
【发布时间】:2010-09-07 16:39:59
【问题描述】:

我正在使用新的 Rails 3 API,我对新方法 run_callbacks(kind, *args, &block) 有疑问

在以下代码中:

class User < ActiveRecord::Base
  before_save :say_hi
  after_save :say_bye

  private

    def say_hi; puts "hi"; end

    def say_bye; puts "bye"; end

end

我可以通过运行在保存时显式调用 回调

> u.run_callbacks(:save)
hi
bye
=> true

但是我的问题是,我怎样才能运行 before_saveafter_save 回调?

查看run_callbacks(kind, *args, &amp;block)代码:

# File activesupport/lib/active_support/callbacks.rb, line 92
def run_callbacks(kind, *args, &block)
  send("_run_#{kind}_callbacks", *args, &block)
end

我不知道如何构建 *args 只调用 beforeafter 回调,我尝试了类似 u.run_callbacks(:before_save) 的东西(给我未定义的方法错误) u.run_callbacks(:save, :before) 运行所有 save 回调(beforeafter)。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3


    【解决方案1】:

    看起来您在 Rails 3.0 中遇到了一个错误。如this lighthouse ticket 中所述,它似乎在 3.0.1 的队列中。

    正如@venables 所说,您至少可以通过将false 发送到run_callbacks(:save) 来触发 before_save 回调。

    【讨论】:

    • 是的,我们似乎无法单独运行 beforeafter 保存回调:(,至少以更简洁的方式:P。
    • @jpemberthy - 如果您使用特定的用例更新您的问题,也许我们可以找到一个解决方法,直到错误得到解决?
    • 谢谢,但这不是必需的,我只是在玩新的 API(谢天谢地)从 2.3.x 迁移或我正在研究的东西不是一件事情:P
    【解决方案2】:

    我仍在研究如何仅执行 after_save,但要运行 before_save 回调,您可以执行以下操作:

    u.run_callbacks(:save) { false }
    

    这应该会在 before_save 运行后取消回调。

    【讨论】:

      猜你喜欢
      • 2022-10-26
      • 1970-01-01
      • 2012-10-09
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多