Rails 引擎中的观察者

2024-01-05

我正在尝试在 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(使用前将#替换为@)

Rails 引擎中的观察者 的相关文章

随机推荐

  • Visual Studio 2017 扩展开发

    您好 我想将我的扩展升级到 Visual Studio 2017 但我得到了Microsoft VisualStudio Shell RegistrationAttribute错误 但我已经添加了此引用 我在编译时收到此错误 是否有任何参考
  • JNI:拦截本机方法输出

    目前我正在开发一个项目 我需要拦截java本机方法调用的结果以进行进一步分析 有多种方法可以实现这一点 但我选择的方法是 在本机绑定时 将 java 本机方法的地址重新绑定到我自己的包装函数的地址 该函数将自行调用初始本机函数 然后返回其结
  • 将ListView的文本设置在中心 - android

    我尝试在中设置 ListView 的文本center的布局 我使用 LinearLayout 并设置重力 中心 但它总是显示在left 这是布局
  • GKE主节点

    在GKE中 当我们创建节点时 会有一个master节点 同时会创建很多worker节点 我怀疑主节点是我们创建的 提到的副本 还是GKE单独创建的主节点 gke 集群形成的拓扑结构 例如网状 星形 是什么 在 GKE 中 如果您创建一个标准
  • 将 freetype 位图复制到 opengl 纹理时出现问题

    我正在尝试生成字符的所有位图 to 并将它们添加到一个长纹理中 我打算将它们放置在固定宽度的纹理中 但现在我只想确保这个概念可行 But I am having problems Instead of getting the expecte
  • 在移动 Safari 中按 Tab 键浏览输入字段会使浏览器跳转

    有没有办法既能专注于球场 又不会出现这种不和谐的动画 当键盘可见时 这种行为尤其糟糕 Demo http plnkr co edit 9OydOFO0KUeKuaH8u70A p info http plnkr co edit 9OydOF
  • 设置graphql的最大文件上传大小(golang)

    我用 golang 编写了一个服务器 可以使用多部分形式将文件上传到该服务器 我想扩大最大上传大小 在我正在使用的实现的文档站点上 我发现了以下内容 上传最大尺寸 此选项指定用于将请求正文解析为 multipart form data 的最
  • 在显式结构中相互覆盖多个 CLR 引用字段?

    Edit 我很清楚这对于值类型非常有效 我的具体问题是关于将其用于引用类型 Edit2 我还知道您不能在结构中覆盖引用类型和值类型 这仅适用于相互覆盖多个引用类型字段的情况 我一直在修改 NET C 中的结构 我刚刚发现你可以这样做 usi
  • 确定代码圈复杂度的最佳工具[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • DataContractSerialiser 和 Serialized 的问题

    我有一些来自 Net 2 0 程序集的类 这些类被标记为可序列化 在我的项目中 我在我的 Classes 中使用这些类 它们标记有 DataContract IsReference true 和 DataMember 现在我遇到了问题 Da
  • 因为文档的框架是沙盒的并且未设置“允许脚本”权限

    我编写了一个程序 生成一个带有以下标头的 html 文件 但我没有iframe根本没有 更不用说在沙箱里了 当我在浏览器 托管在 Jenkins 服务器上 中打开页面时 我看不到 css 这些是错误 安全策略 我看过一些关于堆栈溢出的帖子
  • manifestPlaceholders 值不是字符串

    在我的 AndroidManifest xml 文件中 我有以下应动态填充的元数据标记
  • Redux Provider 不传递 Props/State

    我使用 create react app 创建了一个 React 应用程序 并向其中添加了 Redux 添加后
  • 为什么 wget 忽略 URL 中的查询字符串?

    我想使用wget下载以下18个HTML文件 http www ted com talks quick list sort date order desc page 18 http www ted com talks quick list s
  • StatsModels的predict函数如何与scikit-learn的roc_auc_score交互?

    我正在尝试理解predictPython statsmodels 中用于 Logit 模型的函数 它的文档是here https www statsmodels org stable generated statsmodels discre
  • SPI 电子墨水显示屏与 PIC 18F46K22 连接时出现问题

    我正在使用一个图18F46K22 https ww1 microchip com downloads en DeviceDoc 40001412G pdf在 SPI 主模式下与Waveshare 1 54 电子纸模组 https www w
  • 为什么仅键查询是免费的?

    根据定价文档here https developers google com appengine pricing a keys only查询是免费的 所以看来你可以通过执行以下操作 伪代码 来保存读取 qo ndb QueryOptions
  • laravel 中带有 join 的子查询

    我即将对查询感到疯狂 有人可以帮助我将查询翻译为在 laravel 中工作 或者以 laravel 方式 编写 查询代码如下 使用MySQL 我遇到的问题是第一个 JOIN 与另一个 JOIN 的子查询 SELECT usr token u
  • Lua gmatch 奇数字符(斯洛伐克字母)

    我正在尝试从斯洛伐克语单词的字符串中提取字符 例如 TURTLE 这个词是 KORYTNA KA 但是 当我尝试从字符串中提取 字符时 它会跳过它 local str KORYTNA KA for c in str gmatch a do
  • Rails 引擎中的观察者

    我正在尝试在 Rails 引擎中创建一个观察者 它将观察我的主应用程序中的模型 我的观察者 在 app models my engine my observer rb 中 是 module MyEngine class MyObserver