我有一个Rails应用程序,并在我的应用程序控制器,我有以下的代码不工作:Rails的条件,除非如预期
redirect_to :login unless @current_user = User.find_by_uid(session[:cas_user])
@current_user.syncUserRoles
所以,这应该重定向他们登录,除非它成功地找到他们的用户帐户。但是,即使@current_user返回nil,它仍然会到达下一行。 所以,我修改了代码如下:
@current_user = User.find_by_uid(session[:cas_user])
redirect_to :login unless @current_user.present?
@current_user.syncUserRoles
但是,它会忽略内联,除非在第2行,并用线3. nilClass错误,我不得不最终诉诸于一个完全成熟的,如果出错了else声明,但我想知道我做错了什么。
if @current_user.present?
@current_user.syncUserRoles
else
redirect_to :login
end //This works as intended
它的工作原理!然而,由于某种原因,一旦它返回并运行到同一段代码,它不会设置@current_user,即使此时用户将存在。但是,谢谢,我没有意识到这一点(我猜也习惯了PHP)。 – Oranges13 2012-08-06 16:44:53
仔细检查'session [:cas_user]'和'User.find_by_uid(session [:cas_user])'是你认为它们是什么......其中一个必须是零或可能包含错误的值 – 2012-08-06 16:48:29