在rails中使用binding.pry时,变量范围是否会发生变化?

时间:2014-01-11 00:23:58

标签: ruby-on-rails-3.2 pry

在控制器操作中,我需要检查应用程序本身是访问控制器(可以设置会话变量current_user),还是来自api调用。我的控制器的开头是这样的:

   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

当我使用以下行从pry控制台更改变量api_call,然后继续执行时,控制器从那里开始行为,好像api_call设置为true。

为什么会这样?为什么我的控制器没有正确设置api_call?

1 个答案:

答案 0 :(得分:2)

这根本不应该发生(我是Pry的开发者之一)。最可能的情况是current_user在您第一次调用它时返回非零值,但缓存nil以返回所有将来的调用。

如果您仔细检查过,并且您仍然遇到问题,我需要查看更多代码来进行调试。