【发布时间】:2012-09-04 21:42:25
【问题描述】:
我的 application_controller 中有标准的 current_user 方法。
def current_user_session
return @current_user_session if defined?
(@current_user_session)
@current_user_session = UserSession.find
end
def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session &&
current_user_session.record
end
在我的 UserSessionController 创建方法中,我检查了 注册完成? (只需检查列的值,即 工作正常),然后将用户重定向到用户编辑页面,如果 注册未完成。当我调试这个时,我可以看到 @user_session 对象的尝试记录存在并且它指向 到正确的用户,但 current_user 方法在 重定向到编辑用户路径(当前用户), 总是返回 nil。
这里出了什么问题?
def create
@user_session = UserSession.new(params[:user_session])
# uses a block to prevent double render error...
# because oauth and openid use redirects
@user_session.save do |result|
if result
flash[:notice] = "Login successful!"
if @user_session.new_registration?
logger.info "Session controller : new
registration"
logger.info "Complete -
#{@user_session.registration_complete?}"
flash[:notice] = "Please review profile"
redirect_to edit_user_path(current_user)
else
if @user_session.registration_complete?
logger.info "Session Controller - registration
complete"
else
flash[:notice] = "Please complete profile"
logger.info "Session Controller - registration
not complete"
redirect_to edit_user_path(current_user)
#current_user nil here
end
end
redirect_to current_user ? profile_url(current_user) :
login_url
else
if @user_session.errors.on(:user)
# if we set error on the base object, likely it's
because we didn't find a user
render :action => :confirm
else
render :action => :new
end
end
end
end
【问题讨论】:
-
如果您仍然想要这个问题的答案...请查看问题的答案stackoverflow.com/q/5305306/1188763希望这会有所帮助!