呈现与路由匹配的相同页面
问题描述:
我试图通过开发自己的自定义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,我宁愿不必在多个地方进行更改。
对不起,如果它不明确!随意要求进一步的代码(没有表现出恐惧它的可悲性)。
答
match '/login' => "sessions#new", :as => :login
然后你可以在你的控制器中使用login_path
。
答
你可以这样做
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
我知道,接收提示信息,redirect_to的需要使用(渲染不使用闪光灯的信息工作,对吗?),但如果我想用“渲染{call}“,我怎么去做这件事。我正在浏览路由指南@ rubyonrails.org,但无法找到* easy *解决方案(3.6命名路由),只有在您回答后我才了解:as =>:blah – Minja 2012-08-03 06:59:24