我正在嘗試在我的應用程序中設置一個電子郵件驗證過程,並且我生成一個令牌就好了,並在註冊時向用戶發送電子郵件。但是當我點擊驗證鏈接時,'users_controller/confirm'操作中的if和else語句都會被執行。我被重定向到root_path,但用戶記錄中的兩個字段被修改。當我從rails控制檯運行find_by_token時,它返回預期的用戶。我正在使用mysql,並且想知道是否在查詢中會導致兩者都執行的某種延遲。Rails執行if和else語句
def confirm
if User.find_by_token(params[:token]).nil?
redirect_to root_path
else
@user = User.find_by_token(params[:token])
cookies[:auth_token] = @user.auth_token
User.skip_callbacks = true
@user.update_attribute(:token, "")
@user.update_attribute(:confirmed, 1)
User.skip_callbacks = false
reset_session
redirect_to routes_path
end
end
這似乎極不可能。我會建議向條件的每個分支添加一些輸出,以便您可以看到哪一個被執行。 – MrTheWalrus 2012-04-03 21:02:16
是這個cut'n'pasted代碼,還是你重新鍵入它? (我只是想知道如果你在真實的代碼中有一個錯字,如果你重新輸入的話,這個錯誤不在這裏) – Pavling 2012-04-03 22:06:00
同意 - 這段代碼應該按預期工作。如果實際的代碼細微差別,請注意調用'redirect_to'不會*停止執行動作 - 您需要在執行之後返回。 – Thilo 2012-04-05 08:13:21