У меня есть следующий маршрут в routes.rb
:
map.resources 'protégés', :controller => 'Proteges', :only => [:index]
#
# this version doesn't work any better:
# map.resources 'proteges', :as => 'protégés', :only => [:index]
Когда я перехожу к «http://localhost:3000/protégés
», я получаю следующее:
No route matches "/prot%C3%A9g%C3%A9s" with {:method=>:get}
Я подумал, что HTTP-сервер, который я использовал (Mongrel), не работал должным образом Я также попробовал Apache с Passenger безрезультатно. Я попытался добавить промежуточное программное обеспечение Rack:
require 'cgi'
class UtfUrlMiddleware
def initialize(app)
@app = app
end
def call(env)
request = Rack::Request.new(env)
puts "before: #{request.path_info}"
if request.path_info =~ /%[0-9a-fA-F]/
request.path_info = CGI.unescape(request.path_info)
end
puts "after: #{request.path_info}"
@app.call(env)
end
end
В логах вижу правильную информацию:
before: /prot%C3%A9g%C3%A9s
after: /protégés
но я все еще вижу ту же ошибку "Нет совпадений маршрутов".
Как мне убедить Rails использовать интернационализированный маршрут? Я на Rails 2.3.5 за то, что он стоит.