我有一个类似的问题Ruby on Rails. Unicode routes但标记为在那里工作的答案不适用于我。路径3:变路由器(或其他unicode)在路线
我想拥有包含元音变音符号(ä)的着陆页的基本路线。它必须与SEO目的完全相同。
# encoding: UTF-8
Udb::Application.routes.draw do
get "bonitätsauskunft" => "landing_pages#credit_reference", :as => :lp_credit_reference
当我在浏览器中输入http://localhost/bonitätsauskunft
,我得到一个错误的路由No route matches "/bonit%c3%a4tsauskunft"
。因此,在匹配路由之前,查询字符串并未转义,我认为这很糟糕,因为在URL中有多种方法对变音符进行编码,而且我无法知道浏览器使用哪一种。
例如CGI.escape("bonitätsauskunft") # => "bonit%C3%A4tsauskunft"
,请注意大写C3和A4,而不是像Firefox发送的c3和a4。所以get CGI.escape("bonitätsauskunft")
和Rack::Utils.escape("bonitätsauskunft")
不匹配。
我也试过,没有运气:
get ":page" => "landing_pages#credit_reference", :as => :lp_credit_reference, :page => /bonitätsauskunft/
get ":page" => "landing_pages#credit_reference", :as => :lp_credit_reference, :constraints => {:page => /bonitätsauskunft/}
为我的作品的唯一事情是尴尬的:
# encoding: UTF-8
class UmlautConstraint
def initialize(page)
@page = page
end
def matches?(request)
request.params[:page] == @page
end
end
Udb::Application.routes.draw do
get ":page" => "landing_pages#credit_reference", :constraints => UmlautConstraint.new("bonitätsauskunft")
get "bonitätsauskunft" => "landing_pages#credit_reference", :as => :lp_credit_reference
第二条路线,当然是需要的,所以我可以使用命名路由来创建链接,如link_to("Bonitätsauskunft", :lp_credit_reference)
,因为Rails不知道如何满足UmlautConstraint。
难道没有一个正常和简单的方法来做到这一点?到目前为止,我真的认为第3版的国际化会更好。
Rails 3.0.10,Ruby 1.9.2,Apache2与乘客3.0.7。
也许两者都可以肯定吗? get CGI.escape(“neugründungen”)。downcase =>“landing_pages#startups”,:as =>:lp_startups get CGI.escape(“neugründungen”)=>“landing_pages#startups” – Jan