在Rails控制台中运行脚本并访问创建的对象?

12

最近我发现你可以在Rails控制台中使用load或require运行任意Ruby文件,例如:

load 'test_code.rb'

这个内容在一定程度上很棒,但是使用load或require(有什么区别?)后,我似乎无法访问脚本完成后创建的对象。

例如,在我的脚本中,我可能会有这样的代码:

u = User.where('last_name = ?', 'Spock').first

如果我在rails console中使用load或require运行该脚本,我可以看到它正在工作,我可以看到查询发生,我可以使用在脚本中的对象属性并将它们放入控制台输出中。但是一旦脚本完成,变量u就未定义了。

我想运行一些代码来设置一些对象,然后交互式地探索它们。这个能做到吗?我是否做错了什么或者漏了什么明显的东西?


1
load会在每次调用时包含并执行文件中的代码,而require仅会在执行线程中包含一次。 - Jon
谢谢澄清,Jon! - Dan Barron
2个回答

11

在脚本中定义的变量将在文件加载后超出范围。如果要在控制台中使用变量,请将它们定义为实例变量或常量。

@u = User.where('last_name = ?', 'Spock').first
或者。
USER = User.where('last_name = ?', 'Spock').first

1
还有一个等效的方法:User.find_by(last_name: 'Spock')(也会找到第一条记录),但更短。 - itsnikolay
谢谢你们两个。Vimsha: 我知道我错过了一些显而易见的东西!这将为我节省很多时间。itsnikolay: 你每天都会学到新东西! - Dan Barron

4

eval 命令之后,我看不到任何本地变量。唯一可访问的变量是实例变量或常量。 - Thanasis Petsas
@ThanasisPetsas 你好,考虑查找相关问题/提出问题并链接到它 :-) - Ciro Santilli OurBigBook.com
在我的阅读中,你提供的那句引语只适用于包装是真实的情况。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接