首页 > 解决方案 > 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

也许我需要某种导入声明?

标签: ruby-on-railsruby

解决方案


当您启动 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

推荐阅读