如何从初始化器扩展类并在开发环境中重新加载它?

2024-04-12

我通过包含一个模块来扩展一个类(位于插件中),这是在初始化程序中完成的。

require 'qwerty/core/user'
User.send :include, Qwerty::Core::Extensions::User

然而,在开发过程中,在每个请求之前(以及在控制台中调用 reload! 之后),所有模型都会重新加载,但由于初始化程序不会再次运行,因此不包含该模块。留下一个带有“缺失部件”的模型。

由于模型位于插件中,因此将代码直接包含在类中似乎并不明智(这是通常的方法)。

现在我只是添加了一个 before_filter ,其中包含开发环境中的模块。但我有复制/粘贴并有重复代码在初始化程序和应用程序控制器中。

  # Class extensions in initalizers are over-writtern each request
  def development_loading
    if RAILS_ENV == 'development'      
      User.send :include, Qwerty::Core::Extensions::User
    end
  end

有没有更好的办法?

顺便说一句,该插件是我的,所以我可以向其中添加代码,但模块中保存的扩展可能并不总是存在......


环境.rb

config.to_prepare do
  User.send :include, Qwerty::Core::Extensions::User
end

该代码是在开发模式下的每个请求之前以及在生产模式下运行一次的块。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从初始化器扩展类并在开发环境中重新加载它? 的相关文章

随机推荐

  • 如何强制 rsync 创建目标文件夹

    Example rsync tmp fol1 fol2 fol3 foln user addr tmp fol1 fol2 fol3 foln 我的主要问题是远程计算机上不存在文件夹 tmp fol1 我可以使用哪些参数来强制 rsync
  • 在 Python 中将任何用户输入转换为 int

    我需要转换用户input to int 以下是我到目前为止所写的内容 但尚未成功 它只接受int 最终目标是让用户输入浮点数 例如 4 5 输出为 4 i input Enter any value print int i int接受整数字
  • 无法使用 matplotlib 设置脊柱线样式

    我尝试设置 matplotlib 图脊柱的线条样式 但由于某种原因 它不起作用 我可以将它们设置为不可见或使它们变细 但我无法更改线条样式 我的目标是将一个图分成两部分 以在顶部显示异常值 我想将相应的底部 顶部脊柱设置为点状 以便它们清楚
  • Django 中的动态逻辑查询生成器

    我在数据库中有 2 个表 class Param models Model s name models CharField max length 200 n name models CharField max length 200 clas
  • *nix 上的 rtfd/.webarchive

    所以我的任务是将 rtfd 文件转换为 tiff 首先要事 我们获取了文件夹中的附件 在 Mac 上为 rtfd 并对它们进行了成像 我的问题在于将 RTFD 拆分为多个 rtf 文件 一位同事建议通过我们访问权限有限的 Mac 将文件转换
  • 如何检查我的登录操作中是否存在用户?

    我开始使用新的身份管理并有一个简单的需求 当我的用户使用错误的名称登录时 它会报告密码错误 如何更改此设置 以便它还使用 dbcontext 方法检查用户名是否存在 public ActionResult Login LoginViewMo
  • vi 中可以每 4 个字符添加间距吗?

    vi 中是否可以每 4 个字符添加空格 如果是的话 有什么好的谷歌术语可以搜索来学习如何做类似的事情 要每 4 个字符添加一个空格 您可以使用以下命令 至少在 VIM 中 s 1 g 如果你谷歌 VIM Substitution 你应该会得
  • Visual Studio 2022 永远不会在解决方案和索引文件上显示项目

    有人知道如何解决这个问题吗 早期版本的 Visual Studio 会发生这种情况 例如 2019 和 2017 Visual Studio 不会永远在解决方案和索引文件上显示项目 连程序文件都无法运行 已经尝试了所有方法 完全卸载 Vis
  • 从其他组件访问激活的路线数据

    我们有组件 ka cockpit panel 它没有映射到任何路线 而是手动插入到其他组件中 如下所示 section class ka cockpit panel cockpit 1 pull left section
  • 如何从maven SNAPSHOT存储库下载SNAPSHOT版本?

    所以我有一个项目 我定期发布到 Maven 没有问题 我现在想要提供该项目的快照版本 所以我做了 mvn clean 部署 一切正常 如下所示 INFO 从 sonatype nexus snapshots 检索以前的内部版本号 上传中 h
  • 谷歌应用程序引擎。如何使用内存缓存或数据存储进行同步操作?

    我的主要目标是能够拥有一些同步方法 这些方法在完成之前不应被其他线程访问 如果我有普通的虚拟机 我会将此方法标记为同步 但在 GAE 中我有多个实例 我读到的所有关于此的帖子都说我应该使用内存缓存或数据存储 但具体如何呢 通常答案是重新设计
  • 为什么 GNU binutils 和 GDB 合并为一个包?

    https sourceware org git gitweb cgi p binutils gdb git https sourceware org git gitweb cgi p binutils gdb git 尤其是请参阅tags
  • Azure 数据工作室架构图?

    我最近刚刚下载了带有 SQL Server Express 的 Azure Data Studio 因为我使用的是 Linux 是否有实体关系图表功能 就像 SQL Server Management Studio 具有数据库图表功能一样
  • 无法接受 VSTS 邀请 - 选择的国家/地区为空

    我已邀请用户从我的 ADD 到 VSTS 他收到电子邮件并登录 在 我们需要更多详细信息 表格中 您需要输入姓名 电子邮件 We ll reach you at 和国家 地区 From 但是 那From 下拉列表为空 我无法选择任何国家 地
  • node.js google oauth2 示例停止工作 invalid_grant

    我正在编写一个使用谷歌日历API的程序 所以我使用了快速启动here https developers google com google apps calendar quickstart nodejs它起作用了 但最近相同的代码停止工作并
  • 如何将标签推送到 CI 中的分支?

    我想将手动作业添加到我的拉取请求中 以在运行手动作业时标记我的源分支 该标签将触发我的 bitrise 配置的构建 然而 当我尝试推送我的标签时 我遇到了这个问题 注意 我尝试将标签推送到的分支不受保护 git checkout CI CO
  • org.springframework.web.client.HttpClientErrorException:400 null

    我写了测试FilterDataController 但我在执行测试时出现以下错误 当我手动发送 GET 请求时 我收到了正确的 JSON org springframework web client HttpClientErrorExcep
  • 如何转到 UITableView 中的下一个单元格(详细信息视图)?

    所以 我有一个 UITableView 分为 3 个部分 我希望能够 一旦打开第一部分中的第二行 即 即可向左滑动以转到下一个单元格 并向右滑动以转到上一个单元格 我写了滑动代码 SecondDetailView m void viewDi
  • 如何找到最佳字符串内容,使字符计数向量与其参考字符串的 MSE 最小化

    我有以下参考序列 ref seq lt MGHQQLYWSHPRKFGQGSRSCRVTSNRHGLIRKYGLNMSRQSFR 和这个种子模式字符串 seed pattern lt FKDHKHIDVKDRHRTRHLAK 该模式中有 1
  • 如何从初始化器扩展类并在开发环境中重新加载它?

    我通过包含一个模块来扩展一个类 位于插件中 这是在初始化程序中完成的 require qwerty core user User send include Qwerty Core Extensions User 然而 在开发过程中 在每个请