Как найти или подсчитать количество переменных экземпляров внутри контроллера приложения Rails3 для каждого запроса?

#ruby-on-rails #ruby #ruby-on-rails-3 #ruby-on-rails-3.1

#ruby-on-rails #ruby #ruby-on-rails-3 #ruby-on-rails-3.1

Вопрос:

В моем приложении rails 3 я хотел знать / подсчитывать переменные экземпляра, созданные в действии контроллера, вспомогательных методах в представлении или в ruby-debug.

Способ, которым я попытался, — поместить a <% debugger %> в представление, перезагрузить страницу и в консоль:

 (rdb:25) p controller.instance_variables
[:@action_has_layout, :@view_context_class, :@_headers, :@_status, :@_response, :@_request,
 :@_env, :@lookup_context, :@_action_name, :@_response_body, :@tenant, :@_config,
  :@current_user, :@current_account, :@_params, :@station, :@form, :@line, :@enabled_steps, 
  :@stations, :@raw, :@form_to_render, :@locals_hash]
(rdb:25)
 

Я почти уверен, что в нем не перечислены все переменные экземпляра, определенные в моих вспомогательных методах. И что это :@_... за имя переменной? Как я могу получить доступ к этим переменным?

 (rdb:25) p controller.locals_hash
NoMethodError Exception: undefined method `locals_hash' for #<FormsController:0x00000108533cd0>
(rdb:25) p locals_hash
NameError Exception: undefined local variable or method `locals_hash' for #<#<Class:0x00000100c5ef08>:0x000001081fd0e8>
(rdb:25)
 

Ответ №1:

Я не знаю, есть ли в этом списке переменные из помощника. Я бы сказал, что они прикреплены к представлению, и вы можете захватить их с помощью:

 self.assigns.keys
 

Из инструкции отладчика в представлении.

@_ переменные, как правило, являются частными или не имеют средств доступа, поэтому вы не можете легко получить к ним доступ. Но помните, что Ruby ничего не запрещает и относится к вам как к ответственному разработчику, поэтому:

  • для переменных экземпляра без средств доступа: p controller.instance_variable_get(:@_headers)
  • для частных методов: используйте send метод

Ответ №2:

Это не прямой ответ на ваш вопрос, но Pry gem может быть очень полезен в ваших усилиях по отладке. Это позволяет легко «входить» в объекты, используя его cd и ls команды (и многие другие).

http://railscasts.com/episodes/280-pry-with-rails