首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 3 run_callbacks方法

Rails 3 run_callbacks方法
EN

Stack Overflow用户
提问于 2010-09-07 16:39:59
回答 2查看 8.2K关注 0票数 15

我正在使用新的Rails 3API,我有一个关于新方法args &block)的问题

在以下代码中:

代码语言:javascript
复制
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

我可以通过运行以下命令来显式调用保存上的回调:

代码语言:javascript
复制
> u.run_callbacks(:save)
hi
bye
=> true

但是,我的问题是,我如何才能只运行运行before_save或after_save回调?

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

代码语言:javascript
复制
# File activesupport/lib/active_support/callbacks.rb, line 92
def run_callbacks(kind, *args, &block)
  send("_run_#{kind}_callbacks", *args, &block)
end

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

EN

回答 2

Stack Overflow用户

发布于 2010-09-24 19:57:15

看起来您在Rails 3.0中遇到了一个bug。正如这张灯塔票中提到的,它似乎在3.0.1的队列中。

正如@V纳布尔斯所言,您至少可以通过向before_save发送false来触发run_callbacks(:save)回调。

票数 8
EN

Stack Overflow用户

发布于 2010-09-24 17:25:50

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

代码语言:javascript
复制
u.run_callbacks(:save) { false }

这将在运行before_save回调之后取消回调。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3660691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档