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 に答える