我正在尝试在 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)
但这与公认的答案完全相同在引擎中使用观察者 https://stackoverflow.com/questions/10042758/using-an-observer-within-an-engine
我的命名空间有问题吗?这是实现我想要实现的目标的最佳方法吗?
我最终找到了问题所在。
现实情况是,您无法在engine.rb 文件中提供实际的类,因为Rails 运行配置时,这些内容都尚未加载。这就是为什么对于普通观察者我们提供符号而不是类。
但是,无法提供包含命名空间的符号。相反,我们提供命名空间和类在一个字符串中.
module MyEngine
class Engine < ::Rails::Engine
isolate_namespace MyEngine
config.active_record.observers = 'MyEngine::MyObserver'
end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)