2014-01-11 3 views
0

В действии контроллера мне нужно проверить, будет ли доступ к контроллеру самим приложением (которое установило бы переменную сеанса current_user) или из вызова api. Начало моего контроллера выглядит следующим образом:Изменяется ли переменная scope при использовании bind.pry в рельсах?

130: def create 
    131:  # handle the possibility that this is an api call 
    132:  api_call = current_user.nil? 
=> 133:  binding.pry 

Когда я подглядывать, чтобы увидеть, что происходит, я получаю этот бессмысленный вывод:

[1] pry(#<Crm::ConnectionsController>)> api_call 
=> false 
[2] pry(#<Crm::ConnectionsController>)> current_user 
=> nil 
[3] pry(#<Crm::ConnectionsController>)> current_user.nil? 
=> true 
[4] pry(#<Crm::ConnectionsController>)> api_call = current_user.nil? 
=> true 
[5] pry(#<Crm::ConnectionsController>)> api_call 
=> true 

И когда я изменяю переменную api_call из Поддеть консоль со следующей строкой, затем возобновить выполнение, контроллер ведет себя там, как если бы api_call был установлен в true.

Зачем это было? Почему мой контроллер не устанавливает api_call правильно в первую очередь?

ответ

2

Это не должно происходить вообще (я один из разработчиков Pry). Наиболее вероятным сценарием является то, что current_user возвращает значение, отличное от нуля, при первом его вызове, но кэширование nil для возврата для всех будущих вызовов.

Если вы дважды проверили это, и у вас все еще есть проблема, мне нужно будет больше узнать о вашем коде для его отладки.

+0

Сумасшедший реквизит для того, чтобы иметь одного из реальных авторов pry, ответит на вопрос о SO, даже если это только сказать «Я не уверен». Вы - тот разработчик, который нам нужен, даже если не тот вид, которого мы заслуживаем! – Jazz

Смежные вопросы