0

我正在尝试通过开发自己的自定义 CMS(是的,是的……)来学习 RoR,我想做一件简单的事情,但无法提出一个干净的解决方案。

我的路线文件具有以下匹配项:

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

它的作用是,在点击“http://localhost:3000/login”时,让我登录以创建一个新会话。它完美地工作......

但是,这就是我的 Sessions 控制器的样子:

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 条件中的“else”语句,您会看到我使用 redirect_to '/login' 在登录失败时显示相同的表单。有没有更好的方法来创建指向“/login”的永久链接而不是必须使用字符串,因为如果我决定将来更改 URL,我宁愿不必在多个地方进行更改。

如果不清楚,请见谅!随意要求进一步的代码(不显示它的可悲性)。

4

2 回答 2

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

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

于 2012-08-03T06:23:17.187 回答
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
于 2012-08-03T06:27:24.960 回答