2014-01-11 53 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

相關問題