2014-01-11 18 views
0

在控制器动作中,我需要检查控制器是否被应用程序本身访问(它将设置会话变量current_user),或者来自api调用。我的控制器的开始是这样的:在rails中使用binding.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

相关问题