Запустите script в консоли Rails и получите доступ к созданным объектам?

Недавно я обнаружил, что вы можете запустить произвольный файл Ruby в консоли Rails с помощью load или require, как в:

load 'test_code.rb'

Это замечательно, насколько это возможно, но используя либо нагрузку, либо требующую (какая разница?), я не вижу доступа к объектам, созданным в script после завершения.

Например, в моем script мне может быть что-то вроде:

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

Если я запустил консоль rails и запустил этот script с помощью load или require, я вижу, что он работает, я вижу, что запрос выполняется, и я могу "поместить" атрибуты из объекта внутри script и увидеть их в консольный выход. Но как только выполняется script, переменная u равна undefined.

Я хотел бы запустить некоторый код, чтобы создать несколько объектов, а затем изучить их в интерактивном режиме. Это можно сделать? Я что-то делаю неправильно или что-то неявное?

Ответ 1

Переменные, определенные в вашем script, выйдут из области действия после загрузки файла. Если вы хотите использовать переменные в консоли, определите их как переменные экземпляра или константы

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

или

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

Ответ 2

Как объяснено в http://www.ruby-doc.org/core-2.1.2/Kernel.html#method-i-load:

Ни в коем случае не будут распространяться локальные переменные в загруженном файле в среду загрузки.

Опция состоит в том, чтобы просмотреть файл:

eval(File.read 'your_script.rb')

после чего локальные переменные будут там.