Ruby on rails 3.2 在routes.rb中编辑从小写到大写的参数?

Ruby on rails 3.2 在routes.rb中编辑从小写到大写的参数?,ruby-on-rails-3.2,routes,custom-routes,Ruby On Rails 3.2,Routes,Custom Routes,我正在开发一个RubyonRails应用程序,其中我的routes可以正确处理类似http://localhost:3000/CA转到有关加利福尼亚州的页面。它处理小写字母“ca”,但是否有一种方法,如果我的用户手动键入小写字母“ca”,URL/路由将显示大写字母“ca”?您可以使用路由匹配重定向到所需路由的大写版本 我不知道你的routes文件是什么样子的,所以我会为你提供一个简化版本的东西,你可以用它来构建你需要的东西 假设我有一个状态控制器,每个状态缩写都有一个动作。我可以这样声明我的路线

我正在开发一个RubyonRails应用程序,其中我的routes可以正确处理类似
http://localhost:3000/CA
转到有关加利福尼亚州的页面。它处理小写字母“ca”,但是否有一种方法,如果我的用户手动键入小写字母“ca”,URL/路由将显示大写字母“ca”?

您可以使用路由匹配重定向到所需路由的大写版本

我不知道你的routes文件是什么样子的,所以我会为你提供一个简化版本的东西,你可以用它来构建你需要的东西

假设我有一个
状态
控制器,每个状态缩写都有一个动作。我可以这样声明我的路线(对于
get
action StatesController#ca(对于加利福尼亚州)):

这将只匹配大写的CA,因此如果用户键入
http://localhost:3000/ca
,他们会得到一个错误。要解决此问题,我可以将“/ca”与“/ca”匹配:

get '/ca', to: redirect('/CA')
这是非常简单的。您不太可能希望在routes文件中明确描述每个州的缩写

同样,我不知道您在routes文件中使用了什么,所以我只能告诉您(而不是向您展示一个示例),您可以提供一个块来处理这个逻辑

使用块,您还可以创建逻辑,处理人们不一致地大写缩写的情况(如将
cA
cA
转换为
cA


这里有一些有用的/相关的文档:。

如果用户请求
http://localhost:3000/ca
它应该重定向到(301重定向)
http://localhost:3000/CA
, 您可以在控制器中处理的

def controller_name
  if(params[:id].to_s != params[:id].to_s.upcase)
    redirect_to urlname_url(:params[:url].to_s.upcase), :status => :moved_permanently
  end
  # rest of the code
end

拥有唯一的URL是很好的,因为重复的URL会对SEO产生负面影响。

请注意,这种形式的重定向应该有效,但会涉及额外的往返和相关延迟(您将“301永久移动”返回到浏览器,它通常会在新地址重试)。由于这只发生在用户第一次手动输入URI时(并且可能是在此后单击链接),所以还不错。是否有全局配置(或在约束中指定的默认regexp)来执行此操作?
def controller_name
  if(params[:id].to_s != params[:id].to_s.upcase)
    redirect_to urlname_url(:params[:url].to_s.upcase), :status => :moved_permanently
  end
  # rest of the code
end