我正在尝试通过开发自己的自定义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,我宁愿不必在多个地方进行更改。
很抱歉,如果不清楚的话!随意请求进一步的代码(不要担心它的可怜性)。
答案 0 :(得分:4)
match '/login' => "sessions#new", :as => :login
然后您可以在控制器中使用login_path
。
答案 1 :(得分: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