2012-08-03 40 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 
相关问题