ruby-on-rails - Rails 中的模型范围(?)
问题描述
我是 Ruby on Rails 的新手,正在尝试访问我网站的数据库。我生成并设置了一个名为 Machine 的模型和控制器,并注意到在 Machine 视图之类的地方,我可以简单地使用 @machines.each 遍历数据库中的所有机器。但是,这似乎不是通用的,因为当我直接在项目的最外层目录中创建一个新的 Ruby 文件时,@machines.each 和尝试分配 @machines = Machine.all 都抛出了错误(分别是 NoMethodError 和 NameError) . 这是我可以尝试运行的代码示例:
@machines = Machine.all
@machines.each do |machine|
puts machine.created_at
end
也许我需要某种导入声明?
解决方案
当您启动 rails 服务器(或 rails 控制台)时,它会预加载您的 Rails 应用程序,以便您的模型、常量等自动在范围内。如果您想从单独的脚本访问应用程序的资源,您仍然需要加载应用程序。最简单的方法是使用rails runner
命令,它会加载您的应用程序,然后执行脚本。因此,如果您的上面的脚本在lib/show_machines
您将运行:
$ bin/rails runner lib/show_machines
如果你喜欢自动执行脚本,你也可以使用 runner 作为“shebang”行:
#!/usr/bin/env <your_project_path>/rails/runner
@machines = Machine.all
@machines.each do |machine|
puts machine.created_at
end
推荐阅读
- xml - 动态生成 XSD 时 XML 模式中根元素的定义不正确
- google-cloud-datastore - 使用 Google Cloud Datastore 和 Filter 请求问题
- icinga2 - Icinga2:在 db 中找不到通知历史记录
- r - 离散轴上刻度之间的自定义间距
- javascript - 使用 JQuery 选择给定父元素的子元素
- windows - 将桌面应用程序移植到支持 Microsoft 辅助功能的 64 位时出现问题
- javascript - 即使使用 html 或 css 在浏览器端完成设置,如何隐藏 Google 翻译器弹出窗口?
- xml - 如何使用 XSLT 获取项目符号黑色圆形而不是 html 代码
- python - 使用 europe-west1 时出现 Google Cloud Function Deploy 错误
- jquery - 提高 Ajax 请求性能以在 DataTable 中加载数百万条记录