在 Rails 开发中加载类后代

2023-11-22

当我在本地进入 Rails 控制台时,我需要能够从控制器看到所有类后代。我有这个Api::BaseController我所有的 Api 控制器都继承自它。我遇到的问题是,当我跳到 Rails 控制台检查后代中的 Api 控制器时,它会显示为空,直到我调用它们。这可能与开发中的类不急切加载以及它们不缓存在本地有关。

sample_app$ rails c
Loading development environment (Rails 4.2.0)
2.1.5 :001 > Api::BaseController.descendants
 => []
2.1.5 :002 > Api::V1::FoosController
 => Api::V1::FoosController
2.1.5 :003 > Api::BaseController.descendants
 => [Api::V1::FoosController]

从这个例子中,你可以看到当我调用后代时Api::BaseController第一次,它是一个空数组。调用其中一个控制器后,该类将被加载并显示为后代。在这种情况下,V1 以及 V2、V3 等中可以有任意数量的控制器...

作为一个愚蠢丑陋的黑客,我可以做

Dir.glob("#{Rails.root.join('app', 'controllers', 'api', 'v1')}/**/*.rb").each(&method(:require_dependency))

但我不想每次进入控制台时都写这个。我也在开发 gem,并且绝对不想将此类代码放入我的 gem 中。

另一种选择是在开发中缓存类,但这本身会导致一个巨大的问题。有人有主意吗?

Edit另一种选择是致电Rails.application.eager_load!。如果我只能在 API 文件夹中指定控制器,则此选项可以正常工作。然后我不必急于加载整个应用程序,而只需加载我需要的一小部分控制器。


我找到了以下帖子:http://avinmathew.com/using-rails-descendants-method-in-development/

简而言之,它说如下:

In enviroments/development.rb添加以下内容:

config.eager_load_paths += Dir['path/to/files/*.rb']
ActionDispatch::Reloader.to_prepare do
  Dir['path/to/files/*.rb'].each {|file| require_dependency file}
end

第一行添加启动应用程序(或控制台)时应加载的路径 其余的告诉 Rails 根据每个请求重新加载类。

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

在 Rails 开发中加载类后代 的相关文章

  • 在新的 RHEL6 服务器上安装 ruby​​-filemagic gem 时遇到困难

    它似乎正在寻找 libmagic so 1 文件 我有那个文件 它位于 usr lib64 中 我没有以 root 用户身份运行此安装 我也在使用 rvm 和 Bundler 这是我的 bundle 命令的结果 当它到达 Gemfile 中
  • 将对象数组中的属性映射到另一个数组的更有效的 Ruby 方法?

    我不会在这里重复我的问题 但是有没有更有效的方法来写这个 def recruits names names for r in self referrals do names lt lt r display name end return n
  • 使用Rails UJS,如何从函数提交远程表单

    我正在使用Rails UJS 我有一个表单设置来进行远程提交 如下所示
  • Ruby on Rails 最酷的功能是什么,为什么选择它? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在我问这个问题之前 我浏览了 SO 上 Ruby on Rails 的搜索结果 找不到太多 但以下 在此页面上找到 https stackove
  • Rails:渲染不起作用,仍然出现“模板丢失”

    我目前正在学习 Rails 指南 我完成了这些步骤 但仍然遇到错误 我的 Ruby 版本是ruby 2 1 1p76Rails 版本是4 0 4 按照指南的指示 我创建了一个Article Controller class Articles
  • Ruby on Rails content_for 会自动进行 HTML 转义吗?

    使用 Rails 3 0 6 我发现在视图中 如果我执行 content for food name Macaroni Cheese 然后当我使用它回来时content for food name 那么 将被制作成 amp 已经 如果我做一
  • 通过使用 Minitest 的 Rails,如何设置 RuboCop 在每次使用 rake 运行测试时自动运行?

    当我运行以下命令时 我想要RuboCop https github com bbatsov rubocop在测试运行之前检查我指定的应用程序目录 bundle exec rake test 我添加了以下任务lib tasks test ra
  • 从部分重定向回具有部分的同一页面后保留验证错误

    因此 我试图从我的表单中获取错误 该表单在我的 root path 中呈现为部分内容 在我尝试发布它但失败 或成功 后 我想重定向回 root path 但是 redirect to 决定不保存任何验证信息 想知道如何做到这一点 class
  • Rails:关于产量

    我在a中看到了一些代码导轨 v2 3 app In layout car general html erb 这个视图是由 cars controller 中的方法调用的 我看到了代码 var some car new Object 有两个问
  • Ruby on Rails 3 - 为每个请求重新加载 lib 目录

    我正在为 Rails 3 应用程序创建一个新引擎 正如您所猜测的 该引擎位于我的应用程序的 lib 目录中 但是 我在开发它时遇到了一些问题 事实上 每次更改引擎中的某些内容时 我都需要重新启动服务器 有办法避免这种情况吗 我可以强制rai
  • 如何在 gem 的示例脚本中使用 pry-byebug ?

    我正在制作我的第一个 gem 它不是 Rails 应用程序 而是一个带有一些 AI 的 tic tac toe 库 这样我就可以与一个永远不会输的计算机对手比赛 并在可能的情况下强行获胜 现在我正在尝试调试人工智能中的攻击策略 但我似乎无法
  • 在特定页面上执行 javascript 的正确“Rails”方式

    我试图在特定页面上运行 javascript 而我唯一的解决方案似乎是反模式 我有controller js内部生成的assets javascripts 我在用着gem jquery turbolinks 我的代码类似于以下内容 docu
  • 使用复选框过滤列表

    我有一个电影列表及其评级 在我的页面顶部 我有一个表单 其中提供了一个复选框列表 其中显示了每个可用的评级 G PG 13 等 一旦用户单击复选框并点击提交 我只想显示所选的电影 在我的索引方法中 我有一个名为的实例变量 filtered
  • 为什么 rand() 总是返回相同的数字?

    我在用 兰特 200 在我的 Rails 应用程序中 当我在控制台中运行它时 它总是返回随机数 但如果我在应用程序行中使用它 index rand 200 索引总是相同的号码 为什么会这样以及如何克服这个问题 简单的伪随机数生成器实际上生成
  • 在 CircleCI 中设置 Elasticsearch 和 Ruby on Rails

    我正在尝试在 Rails 应用程序中使用 Elasticsearch 设置 CircleCI 我想已经配置了镜像 但是如何在 CI 中连接到它 到目前为止我已经尝试过 https github com elastic elasticsear
  • Ruby 的字符串并置功能的官方文档在哪里?

    我最近意识到 如果你并置一系列 Ruby 字符串文字 例如 a b c 它相当于这些字符串文字的串联 但是 我在任何地方都找不到这种语言功能的记录 我使用术语 并置 和 串联 进行搜索 但只在几个 StackOverflow 响应中找到了对
  • 自定义通用 Rails 错误消息

    我们的 Rails 应用程序被设计为链接到多个客户端数据库的单个代码库 根据子域 应用程序确定要连接到哪个数据库 我们使用液体模板为每个客户定制演示文稿 我们无法为每个客户定制通用的 我们很抱歉 出了点问题 消息 谁能推荐一种方法让我们能够
  • 通过 ESI:include 设置 Cookie,如何?

    我正在尝试使用 esi 在我的网站上创建忍者缓存 这个想法是 该网站大部分是静态的 我只需要在用户是否登录时做一些花哨的事情 所以我试图在页面A上放置一个 并在页面B的应用程序中设置触发器 这样我就可以将页面 A 缓存在 varnish 上
  • Rails 4 的 mobile_fu

    我正在尝试将我的应用程序从 Rails 3 2 13 切换到 Rails 4 在此过程中 我遇到了一个主要障碍 我使用 gem mobile fu 来确定用户是否来自移动设备 该 gem 需要 Railties 3 2 13 但 Rails
  • 为什么 Rails 中的区域设置充当全局(使用 Thin 时)?

    我刚刚意识到在控制器中设置区域设置的推荐 Rails 方法 before filter set locale def set locale I18n locale params locale I18n default locale end

随机推荐

  • 如何将模型从一个 Django 应用程序迁移到新的应用程序中?

    我有一个 Django 应用程序 里面有四个模型 我现在意识到这些模型之一应该位于单独的应用程序中 我确实安装了 South 用于迁移 但我不认为这是它可以自动处理的事情 如何将旧应用程序中的模型之一迁移到新应用程序中 另外 请记住 我需要
  • 当没有指定值时,是否应该跳过验证?

    我在 GlassFish 3 上使用 JSF2 我有一个接受可选电话号码的表格 我有这个自定义电话号码验证器 如下 并且我将该字段设置为 required false 因为电话号码在表单中是可选的 问题是 该领域的价值总是得到验证 当没有指
  • ASP.net 对根证书存储的权限

    是否可以授予 asp net 对证书存储的读取权限 如果是 怎么办 如果否 我是否需要为每个证书文件手动设置权限 如果是 这些文件在硬盘上的物理位置在哪里 一般来说 您授予权限A证书 我使用这样的方法来查找定制的证书并授予权限 如果您使用的
  • AngularJs 指令内的数据绑定

    我很难弄清楚如何确保在创建指令时维护双向数据绑定 这是我正在使用的东西和小提琴 http jsfiddle net dkrotts ksb3j 6 HTML
  • ASP.NET Core MVC,从数据库获取文件并渲染为图像

    我将图像数据存储在 SQL 表中 字段类型为varbinary 最大 我还存储图像内容类型 使用 Microsoft ASP NET Core MVC 和 Dapper 我尝试从数据库中获取文件并将其呈现为图像 这是我的文件模型 using
  • 如何使用base64设置图像源

    我想将图像源设置为 base64 源 但它不起作用 JSfiddle net NT9KB img src JavaScript document getElementById img src data image png base64 iV
  • 测试使用 Flask-WTF validate_on_submit 的 POST

    我很难测试 POST 以将类别添加到数据库 在该数据库中我使用 Flask WTF 进行验证和 CSRF 保护 对于CRUD操作请pm我的网站 我使用过 Flask Flask WTF 和 Flask SQLAlchemy 这是我的第一个独
  • 将数据从一个数据库传输到另一个数据库

    如何从一个数据库中取出数据并插入到另一个数据库表中 我不能这样做 请帮助我将数据从一个设备传输到另一个设备 有多种方法可以做到这一点 以下是两个选项 选项1 右键单击 要复制的数据库 选择 任务 gt 生成脚本 选择特定数据库对象 检查 表
  • 具有 Surface 输入的 MediaCodec:生成分块输出

    我正在尝试通过 CameraPreview 数据生成短的连续 mp4 文件MediaCodec createInputSurface 然而 重新创建MediaCodec与其关联的 Surface 需要停止相机以允许再次调用mCamera s
  • XmlSerializer 不使用 sgen 创建的 XmlSerializers.dll

    在我的 Visual Studio 2010 项目中 我使用以下 Post Build 事件命令行来使用 sgen 创建 XmlSerializers dll 构建后事件 ProgramFiles Microsoft SDKs Window
  • Google+ 照片 api [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 有 Google 照片 gdata API 吗 我正在使用谷歌 picasa API但 picasa 对照片有 1 GB 的限制 我想使用我的脚本上
  • 使用 PHP,如何访问从 Stripe API 返回的受保护的 _values 属性?

    我正在整合条纹API与 CMS 我需要归还 values查询中的属性作为数组 以便数据可用作 CMS 中的模板变量 但它始终受到保护 我一直在使用反思类获取数据 但现在我正在使用 Stripe Stripe Plan all 我必须多次调用
  • Pip 选择了错误的路径

    我使用的是 Windows 10 我摆脱了 python 3 8 并安装了 3 7 作为系统上唯一的 python 版本 当尝试使用 pip 安装库时 我现在收到错误 Fatal error in launcher Unable to cr
  • Task.WaitAll() 未按预期工作

    我正在尝试弄清楚如何使用 Task 类 过去我一直使用常规的 Thread 类 但我正在尝试掌握所有异步编程 作为示例 我创建了一个包含所有代码的主 Winforms 应用程序 我的问题的相关代码是 Relevant delegates p
  • 按钮不透明度/透明度

    主要 xml
  • 在 Vuejs 中将数据从子级传递到父级(有那么复杂吗?)

    我读过 vuejs 从子组件更新父数据 https forum vuejs org t passing data back to parent 1201 2 概念是相同的 我需要将数据对象从子级传递给父级 我用过 emit将数据传递给父组件
  • 如何使用php将数据插入tally?

    我已经使用此代码从 tally erp 9 0 获取数据
  • Web 应用程序中的静态变量

    我可以在 Web 应用程序中使用静态变量吗 static 的替代品是什么 当我在页面中使用静态变量并且多个用户使用该应用程序时 它会产生冲突数据 不正确的数据 使用静态成员有哪些限制 静态成员在内存中共享吗 考虑将共享变量存储在 HttpA
  • 如何将 font Awesome 合并到 dart 组件中?

    以下 html 在文本左侧显示了一个漂亮的相机图标 当尝试设计聚合物组件的样式时 这是如何实现的 p i class fa fa camera retro fa lg i Cool camera p 具体来说 链接应该包含在哪里 ap
  • 在 Rails 开发中加载类后代

    当我在本地进入 Rails 控制台时 我需要能够从控制器看到所有类后代 我有这个Api BaseController我所有的 Api 控制器都继承自它 我遇到的问题是 当我跳到 Rails 控制台检查后代中的 Api 控制器时 它会显示为空