#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
команды (и многие другие).