在控制器操作中,我需要检查应用程序本身是访问控制器(可以设置会话变量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?
答案 0 :(得分:2)
这根本不应该发生(我是Pry的开发者之一)。最可能的情况是current_user
在您第一次调用它时返回非零值,但缓存nil以返回所有将来的调用。
如果您仔细检查过,并且您仍然遇到问题,我需要查看更多代码来进行调试。