2015-11-06 66 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 

这两个应该按预期方式工作,应该可以解决您的问题。