我继承了一些 Rails 代码,用于检查用户是否在由 before 过滤器调用的方法中定义:
before_filter :get_user
def get_user
@user = User.find(params[:id])
if !@user
return false
end
end
现在,问题是这不起作用:) 如果找不到用户,我们不会从控制器返回,我们只是从get_user()
方法返回,然后在设置为的show()
orupdate()
方法中继续执行。@user
nil
get_user()
我的简单解决方案是在if@user
为 nil时添加重定向:
def get_user
@user = User.find(params[:id])
if !@user
redirect_back
return false
end
end
现在,我的测试通过了,世界上的一切似乎都是正确的。但是......我不明白发生了什么。有人可以解释一下为什么 return inget_user()
没有完全停止控制器中的执行,而是让我们脱离get_user()
并导致我们陷入最初调用的控制器方法?
谢谢!