redirect_to无法正常工作

时间:2015-11-06 01:17:42

标签: ruby-on-rails ruby

this.state.filters === this.props.filters

当我运行应用程序时,我有这样的代码,如果当前照片不是由所有者拥有,它会将用户重定向到照片路径。但是,当我运行相同的代码集但添加返回时:

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

这是owns_photo正常工作的方法。我对这个回归问题很好奇。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

这与Ruby Operator Precedence

有关

&&(逻辑AND)运算符的优先级高于and(逻辑组合)运算符。

所以,当你写下这个:redirect_to photos_path && return时,这被解释为:redirect_to (photos_path && return)这不是你想要的。

要解决此问题,您可以做两件事(使用&&运算符时使用括号):

(redirect_to photos_path) && return

或者,在Rails中使用通常用于此类情况的and运算符(参见this post):

redirect_to photos_path and return

这两个都应该按预期工作,并应解决您的问题。