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

时间:2014-01-08 20:15:33

标签: ruby-on-rails-3.2 routes custom-routes

我正在开发一个Ruby on Rails应用程序,我的路由可以正确地处理类似http://localhost:3000/CA的内容,以访问有关加利福尼亚的某些页面。它处理小写“ca”但有一种方式,如果我的用户手动键入小写“ca”,URL / Routes将显示大写“CA”?

2 个答案:

答案 0 :(得分:1)

如果用户请求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

拥有唯一的网址是很好的,因为重复的网址会对搜索引擎优化产生负面影响。

答案 1 :(得分:0)

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

我不知道你的路线文件是什么样的,所以我将为你提供一些我想出的东西的简化版本,你可以用它来构建你需要的东西。

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

get '/CA', to: 'states#ca'

这只会匹配大写的CA,因此如果用户输入http://localhost:3000/ca,他们就会收到错误。要解决此问题,我可以将'/ ca'与'/ CA'匹配:

get '/ca', to: redirect('/CA')

这非常简化。您不太可能希望在路径文件中明确描述每个州的缩写。

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

使用一个块你也可以创建逻辑来处理人们不一致地缩写缩写的情况(比如将cACa转换为CA)。

这里有一些有用/相关的文档:http://guides.rubyonrails.org/routing.html#redirection