2014-06-20 51 views
2

誤差(undefined method 'id' for false:FalseClass)正在引用這條線:未定義的方法`ID」爲假:FalseClass

if current_user && current_user.admin? || current_user.id == id.to_i 

這是爲什麼產生誤差?如果第一個&&條件失敗,它不應該達到current_user.id嗎?

回答

7

表達

current_user && current_user.admin? || current_user.id == id.to_i 

被解析爲以下

(current_user && current_user.admin?) || (current_user.id == id.to_i) 

所以,當CURRENT_USER是假的,評估雲像

(false && current_user.admin?) || ? 
(false)      || ? 
            (false.id == id.to_i) 
           # \\ KABOOM! // 

它可能應該表示爲以下括號表示僅在其中方法僅針對current_user調用時的情況t假/無。

current_user && (current_user.admin? || current_user.id == id.to_i) 

可替換地,可以考慮使用其它的流量控制結構等if和/或離散的方法封裝的邏輯。


這也是奇怪,CURRENT_USER可以falsenil很可能是當出現「沒有當前用戶」更貼合..

+2

你應該在你的答案提示正確的方式做到這一點,即'A &&(B || C)' –

+0

@ p11y感謝您的建議,我補充說。 – user2864740

+0

感謝您的幫助!我正在使用巫術,所以我沒有寫'current_user'。 –

相關問題