#ruby #ruby-on-rails-3 #metaprogramming
#ruby #ruby-on-rails-3 #метапрограммирование
Вопрос:
я пытался составить список переменных экземпляра внутри контроллера, но в результате
irb>HomeController.instance_variable_names
=> ["@visible_actions", "@inheritable_attributes", "@controller_path", "@action_methods", "@_process_action_callbacks"]
и я попробовал это в действии
irb>HomeController.action("index").instance_variable_names
=> []
итак, чему принадлежат переменные экземпляра контроллера?
Ответ №1:
Переменные экземпляра принадлежат созданному объекту controller и создаются только после выполнения метода action. Попробуйте это:
irb>instantiated_controller = HomeController.new
irb>instantiated_controller.index
irb>instantiated_controller.instance_variable_names
=> ["@_status", "@_headers", ...
Ответ №2:
Вы также можете вызывать self.instance_variable_names
непосредственно из кода контроллера, а затем просматривать их в журналах.
class ProfilesController < ApplicationController
...
def update
logger.info("List of instance vars: #{self.instance_variable_names}")
...
end
end