2010-09-26 2 views
7

Est-il possible de définir une chaîne Unicode en tant que segment d'un chemin dans Rails?Ruby on Rails. Routes Unicode

Je les opérations suivantes:

 
    
# app/controllers/magazines_controller.rb 

class MagazinesController < ApplicationController 
    def index          
    end                   
end 
 
 
    
# encoding: utf-8 
# config/routes.rb 

PublishingHouse::Application.routes.draw do 
    resources :magazines, 
    :only => :index, 
    :path => :журналы # a Unicode string is set as a segment of the path 
end 
 
 
$ rake routes 
magazines GET /журналы(.:format) {:action=>"index", :controller=>"magazines"} 

Mais quand je vais le chemin que j'obtiens l'erreur de routage:

 
$ w3m http://localhost:3000/журналы 
... 

Routing Error 

No route matches "/%D0%B6%D1%83%D1%80%D0%BD%D0%B0%D0%BB%D1%8B" 

Voici le journal du serveur:

 
$ rails s thin 
... 

Started GET "/%D0%B6%D1%83%D1%80%D0%BD%D0%B0%D0%BB%D1%8B" for 127.0.0.1 at 2010-09-26 13:35:00 +0400 

ActionController::RoutingError (No route matches "/%D0%B6%D1%83%D1%80%D0%BD%D0%B0%D0%BB%D1%8B"): 

Rendered /usr/local/lib/ruby/gems/1.9.1/gems/actionpack-3.0.0/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (1.2ms) 

Merci.

Debian GNU/Linux 5.0.6;

Ruby 1.9.2;

Ruby on Rails 3.0.0.

Répondre

11

Intereting, je pense que Rails ont besoin d'un patch pour cela. Je parlerai à quelqu'un du noyau à ce sujet plus tard. En attendant, ce qui suit devrait fonctionner:

PublishingHouse::Application.routes.draw do 
    resources :magazines, 
    :only => :index, 
    :path => Rack::Utils.escape('журналы') # a Unicode string is set as a segment of the path 
end 
+0

Cela fonctionne. Merci beaucoup, ** raggi **. – Shamaoke

+0

Il est discuté en tant que question de Rails ici: https://github.com/rails/rails/issues/3470 –