2015-11-06 52 views
0
unless current_user.owns_photo? @photo 
    redirect_to photos_path 
end 

我有這樣的代碼,當我運行該應用程序,如果當前照片不屬於所有者它將重定向用戶照片的路徑。但是,當我運行相同的一組代碼,但添加回報:redirect_to無法正常工作

unless current_user.owns_photo? @photo 
    redirect_to photos_path && return 
end 

它會導致不規則的結果。經過身份驗證的用戶可以繼續查看不屬於他們的內容。但是,當我放棄返回它工作正常。爲什麼它不與回報一起工作?我聽說在使用redirect_to時返回是很好的做法,因此它不會在後面執行更多代碼。

def owns_photo?(photo) 
    photos.include? photo 
end 

這是owns_photo的方法工作正常。我只是好奇這個回報問題。

回答

1

嘗試redirect_to photos_path and return。使用and而不是&&。這些運營商有不同的優先級

打字redirect_to photos_path && return意味着redirect_to (photos_path && return),而redirect_to photos_path and return意味着(redirect_to photos_path) and return

+0

這是很好的幫助謝謝 – Byrd

0

這與Ruby Operator Precedence

&&(邏輯AND)運算符具有比and(邏輯組合物)操作者更高的優先級做。

所以,當你寫這個:redirect_to photos_path && return,這被解釋爲:redirect_to (photos_path && return)這不是你想要的。

爲了解決這個問題,你可以做兩兩件事,要麼(使用括號,而使用&&運營商):

(redirect_to photos_path) && return 

,或者使用and運營商,其通常在這種情況下,使用Rails中(見this post) :

redirect_to photos_path and return 

這兩個應該按預期方式工作,應該可以解決您的問題。