我正在尝试在我的Rails引擎中创建一个观察者,它将观察我的主应用程序中的模型。
我的观察员(在app / models / my_engine / my_observer.rb中)是,
module MyEngine
class MyObserver < ActiveRecord::Observer
observe AppModel
def after_create
# code to run when callback is observed
end
end
end
为了注册观察者,我修改了我的引擎(在lib / my_engine / engine.rb中),
module MyEngine
class Engine < ::Rails::Engine
isolate_namespace MyEngine
config.active_record.observers = MyEngine::MyObserver
end
end
但是,当我尝试启动服务器时,出现以下错误,
... in `<class:Engine>': uninitialized constant MyEngine::MyObserver (NameError)
然而,这与Using an observer within an Engine
的接受答案完全相同我是否在使用命名空间做错了什么?这是我想要实现的最佳方法吗?
答案 0 :(得分:4)
我最终弄明白了这个问题。
实际情况是你无法在engine.rb文件中提供实际的类,因为在Rails运行配置时,这些东西都没有被加载。这就是为什么对于普通观察者我们提供符号而不是类。
但是,无法提供包含命名空间的符号。相反,我们在字符串中提供命名空间和类。
module MyEngine
class Engine < ::Rails::Engine
isolate_namespace MyEngine
config.active_record.observers = 'MyEngine::MyObserver'
end
end