Запустите 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')
после чего локальные переменные будут там.