我最近发现你可以使用load或require在Rails控制台中运行任意Ruby文件,如:
load 'test_code.rb'
这很好,但是使用load或require(有什么区别?)我似乎无法在脚本完成后访问脚本中创建的对象。
例如,在我的脚本中,我可能会有类似的内容:
u = User.where('last_name = ?', 'Spock').first
如果我启动rails console并使用load或require运行该脚本,我看到它正常工作,我看到查询发生了,我可以在脚本中“放置”对象的属性,并在控制台输出中查看它们。但是一旦脚本完成,变量u就不确定了。
我想运行一些代码来设置一些对象,然后以交互方式探索它们。可以这样做吗?我做错了什么或遗漏了一些明显的东西吗?
答案 0 :(得分:10)
加载文件后,脚本中定义的变量将超出范围。如果要在控制台中使用变量,请将它们定义为实例变量或常量
@u = User.where('last_name = ?', 'Spock').first
或
USER = User.where('last_name = ?', 'Spock').first
答案 1 :(得分:3)
如http://www.ruby-doc.org/core-2.1.2/Kernel.html#method-i-load中所述:
在任何情况下,加载文件中的任何局部变量都不会传播到加载环境。
选项是评估文件:
eval(File.read 'your_script.rb')
之后会有局部变量。