список переменных экземпляра контроллера Rails

#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