我正在使用新的Rails 3API,我有一个关于新方法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_save或after_save回调?
查看run_callbacks(kind, *args, &block)代码:
# 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)运行所有的保存回调(前后)。
发布于 2010-09-24 19:57:15
看起来您在Rails 3.0中遇到了一个bug。正如这张灯塔票中提到的,它似乎在3.0.1的队列中。
正如@V纳布尔斯所言,您至少可以通过向before_save发送false来触发run_callbacks(:save)回调。
发布于 2010-09-24 17:25:50
我仍然在研究如何只执行after_save,但是要只运行before_save回调,您可以执行以下操作:
u.run_callbacks(:save) { false }这将在运行before_save回调之后取消回调。
https://stackoverflow.com/questions/3660691
复制相似问题