Как посмотреть или посчитать количество экземпляров в контроллере приложения Rails3 на запрос? - PullRequest
0 голосов
/ 02 ноября 2011

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

Я попытался поместить <% 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)

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

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

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

1 голос
/ 02 ноября 2011

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

self.assigns.keys

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

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

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