2012-08-14 37 views
0

我正在通過rails教程(railstutorial.org)工作,並在發生驗證時注意到登錄表單中存在問題。我的路由爲:Rails教程:命名路線和登錄表單

match '/signin', to: 'sessions#new' 

當驗證發生時,頁面的URL切換到/ sessions。我對會話控制器看起來是這樣的:

class SessionsController < ApplicationController 

    def new 
    end 

    def create 
    user = User.find_by_email(params[:session][:email]) 
    if user && user.authenticate(params[:session][:password]) 
     sign_in user 
     redirect_back_or user 
    else 
     flash.now[:error] = "Invalid email/password combination" 
     render 'new' 
    end 
    end 

我的問題是如何讓這個生效的形式出現還是以/登入的網址。謝謝。

回答

1

如果你想繼續使用寧靜的路由(這是Rails的當前和長時間標準),你不能。如果您不介意偏離此路徑,則可以創建一些自定義路由,而不是使用「正常」資源樣式路由。

首先,你必須改變你的控制器和行動從create方法移動標誌的new方法(這是什麼/登入路線):

class SessionsController < ApplicationController 
    def new 
    if request.post? 
     user = User.find_by_email(params[:session][:email]) 
     if user && user.authenticate(params[:session][:password]) 
     sign_in user 
     redirect_back_or user 
     else 
     flash.now[:error] = "Invalid email/password combination" 
     end 
    end 
    end 
end 

這意味着無論是最初的GET /登入請求和最終的POST /登錄請求將通過相同的操作得到處理。如果檢測到POST,它將嘗試登錄用戶並在成功時重定向。如果發出GET請求,它將會像平常一樣渲染表單。

然後,你必須改變你的登錄表單(應用程序/視圖/會話/ new.html.erb)使用登入路徑,而不是正常的路線:

<% form_tag '/signin' do %> 
    .... 
<% end -%> 

應該這樣做。

+0

這個作品,謝謝你的詳細解答。 – PestoPenguin 2012-08-14 22:31:36