我正在尝试让ActiveModel :: Callbacks与Rails 3应用程序的ActiveResource(特别是after_initialize)一起使用,但我似乎无法让它工作。我没有得到任何错误,但回调方法永远不会执行。
以下是一段代码
class User < ActiveResource::Base
extend ActiveModel::Callbacks
define_model_callbacks :initialize, :only => :after
after_initialize :update_info
def update_info
puts 'info'
end
end
由于某种原因,从不执行update_info。任何人都知道如何让这个工作?
答案 0 :(得分:7)
如果有人感兴趣,我会重新阅读有关这方面的文档,我认为这是对代码如何在封面下工作的解释,结果证明我需要覆盖方法I正在添加回调:
def initialize(attributes = {}, persisted = false)
run_callbacks :initialize do
super(attributes, persisted)
end
end
这对我来说似乎非常反直觉,因为它希望您追踪现有方法的签名,覆盖它并添加回调功能。我希望我在这里遗漏了一些东西,只是犯了一个错误,但我还没有得到任何其他解决方案。
无论如何,这里有一个猴子补丁,可以为所有AR类提供回调:
module ActiveResource
class Base
extend ActiveModel::Callbacks
define_model_callbacks :initialize, :only => :after
def initialize_with_callback(attributes = {}, persisted = false)
run_callbacks :initialize do
initialize_without_callback(attributes, persisted)
end
end
alias_method_chain :initialize, :callback
end
end