2011-03-03 75 views
3

我是Michael Hartl的(精彩的)Rails教程的完整noob,並且在Ch.10.2.3中有一個友好的重定向問題。目的是嘗試存儲位置,重定向到登錄頁面,然後在登錄完成後重定向回原始的預定目標。我的問題是,它只是在登錄/創建會話後呈現標準用戶配置文件頁面,而不是重定向。Rails重定向問題 - Hartl的Rails教程10.2.3

我有這樣的sessions_controller:

def create 
    user = User.authenticate(params[:session][:email], 
          params[:session][:password]) 
    if user.nil? 
    flash.now[:error] = "Invalid email/password combination." 
    @title = "Sign in" 
    render 'new' 
    else 
    sign_in user 
    redirect_back_or user 
    end 
end 

而這sessions_helper:

def authenticate 
    deny_access unless signed_in? 
end 

def deny_access 
    store_location 
    redirect_to signin_path, :notice => "Please sign in to access this page." 
end  

def redirect_back_or(default) 
    redirect_to(session[:return_to] || default) 
    clear_return_to 
end 

private 
    def store_location 
    session[:return_to] = request.fullpath 
    end 

def clear_return_to 
    session[:return_to] = nil 
end 

我敢肯定,我再一次犯了一個愚蠢,簡單的錯誤,但我不能找到它..幫助?

+0

你試過'session [:return_to] = request.request_uri'嗎?它已經有一段時間了,所以我不記得request.fullpath是否會有一些你可以'redirect_to'。它可能會做,但認爲這將是一件容易的事,你可以檢查。 – sorens 2011-03-03 16:21:14

+0

我有,但從其他意見,我認爲request_uri已被棄用Rails 3.0。 – GroundskeeperWillie 2011-03-03 22:34:37

+0

很難不擁有所有的代碼,但有一點需要檢查:確保方法'store_location'實際上在登錄過程中被調用。 – 2011-03-04 01:42:06

回答

1

該代碼可在此處獲得:https://github.com/railstutorial
考慮爲您自己創建一個新的git分支(或新項目),只使用此存儲庫的代碼。然後,你會有一個工作的本地版本,以便在事情出錯時進行比較。

+0

好建議佩裏。有沒有一種方法可以輕鬆比較兩個代碼體來跟蹤錯誤? – GroundskeeperWillie 2011-03-17 23:09:20

+0

我的第一個想法是使用unix命令diff,但我不知道這是否容易。 – 2011-03-18 01:49:05

+0

簡單但耗時!並有不同的結果。沒有明顯的差異,所以我回到我知道我的測試正在工作的地方(第9章),開始了一個新的分支,並重新做了一遍。它似乎工作。所以,好消息是它正在工作,壞消息是我真的不知道爲什麼。好處是,至少我已經爲我的曲目添加了一個令人驚訝的多功能新命令。 – GroundskeeperWillie 2011-03-23 08:31:34

相關問題