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

时间:2014-01-27 15:33:45

标签: ruby-on-rails ruby-on-rails-4 rails-console

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

load 'test_code.rb'

这很好,但是使用load或require(有什么区别?)我似乎无法在脚本完成后访问脚本中创建的对象。

例如,在我的脚本中,我可能会有类似的内容:

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

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

我想运行一些代码来设置一些对象,然后以交互方式探索它们。可以这样做吗?我做错了什么或遗漏了一些明显的东西吗?

2 个答案:

答案 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')

之后会有局部变量。