2012-08-03 52 views
0

我試圖通過開發自己的自定義CMS來學習RoR(是的,是的......),並且我想要做一件簡單的事情,但無法拿出一個乾淨解。呈現與路由匹配的相同頁面

我的路線文件有下列搭配:

match '/login' => "sessions#new" 

它所做的是,在命中的「http://本地主機:3000 /登錄」,是讓我登錄到創建一個新的會話。它完美...

但是,這是我的會話控制器的樣子:

class SessionsController < ApplicationController 
    def create  
    @username = params[:session][:username] 
    @password = params[:session][:password] 
    @rUser = User.find_by_username(params[:session][:username]) 

    #if user && user.authenticate(params[:session][:password]) 
    if @rUser && Digest::SHA2.hexdigest(@password) == @rUser.password 
     # Sign the user in and redirect to the user's show page. 
     redirect_to users_path, :flash => { :notice => "Logged in as #{@username}." } 
    else  
     # Create an error message and re-render the signin form. 
     redirect_to '/login', :flash => { :error => "Login failed. Either the username or password was incorrect." } 
    end 
    end 
end 

如果你看看在「其他」語句在我的if-else條件,你會看到我使用redirect_to'/ login'在登錄失敗時顯示相同的表單。有沒有更好的方法來創建一個永久鏈接到'/ login'而不是必須使用一個字符串,因爲如果我決定在將來更改URL,我寧願不必在多個地方進行更改。

對不起,如果它不明確!隨意要求進一步的代碼(沒有表現出恐懼它的可悲性)。

回答

4
match '/login' => "sessions#new", :as => :login 

然後你可以在你的控制器中使用login_path

+0

我知道,接收提示信息,redirect_to的需要使用(渲染不使用閃光燈的信息工作,對嗎?),但如果我想用「渲染{call}「,我怎麼去做這件事。我正在瀏覽路由指南@ ruby​​onrails.org,但無法找到* easy *解決方案(3.6命名路由),只有在您回答後我才瞭解:as =>:blah – Minja 2012-08-03 06:59:24

2

你可以這樣做

match '/login' => "sessions#new", :as => :login  

     #if want to call like localhost:3000/login 

match '/sign_in' => "sessions#new", :as => :sign_in 

    #if want to call like localhost:3000/sign_in