1

我是 Ruby on Rails 的新手,使用 authlogic 进行用户身份验证,并且使用下面的书面代码可以正常工作

def current_user_session
    return @current_user if defined?(@current_user_**sesssion**)

    @current_user_session = UserSession.find
end

但不是代码

def current_user_session
    return @current_user if defined?(@current_user_session)
    @current_user_session = UserSession.find
end

请注意会话的拼写(在@current_user_session 中)

任何人都可以对此提供帮助,无论这是逻辑错误还是其他任何错误?

4

1 回答 1

2

这是您代码中的一个小错误。你要:

def current_user_session
    return @current_user_session if defined?(@current_user_session)
    @current_user_session = UserSession.find
end

即您要返回的变量是您检查过的变量是已定义的@current_user_session,而不是@current_user.

拼写错误使其正常工作的原因是因为defined?(@current_user_sesssion)将始终返回 false,因此该方法的版本将始终返回UserSession.find. @current_user_session在第一次调用 where定义正确的情况下,@current_user_session该方法将返回@current_user(可能是nil)。

于 2013-01-04T13:30:00.127 回答