【发布时间】:2012-10-12 01:27:14
【问题描述】:
我有一个包含在 Rails Observer 中的模块。
目的是:
- 调用
after_save和after_update一个名为check_integrity的方法 - 如果在 Observer 中定义,请在
after_save或/和after_update末尾调用check_integrity。
简而言之,它应该始终调用check_integrity。
我尝试了如下代码:
module IntegrityObserver
extend ActiveSupport::Concern
included do
alias_method_chain :after_save, :check_integrity
alias_method_chain :after_update, :check_integrity
end
def check_integrity
# do something
end
end
class UserObserver < ActiveRecord::Observer
include IntegrityObserver
def after_save(object)
# do something
end
end
但它会引发错误:activesupport-3.0.17/lib/active_support/core_ext/module/aliasing.rb:31:in alias_method': undefined method after_update' for class TaskObserver' (NameError)
有人知道我怎样才能做我想做的事吗?
谢谢!
【问题讨论】:
-
include CacheObserver行是否打算成为include IntegrityObserver? TaskObserver 是从哪里来的?在after_save定义之后包含模块 是否有帮助? -
谢谢我修复了它@x1a4,包括 after_save 之后会起作用,但在方法未定义时不起作用
标签: ruby-on-rails ruby metaprogramming alias-method-chain