2010-09-26 174 views
7

是否可以在Rails中将Unicode字符串设置为路径的一部分?Ruby on Rails。 Unicode路由

我尝试以下方法:

 
    
# 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"} 

但是当我去的路径我得到的路由错误:

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

Routing Error 

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

这里的服务器日志:

 
$ 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) 

谢谢。

的Debian GNU/Linux的5.0.6;

Ruby 1.9.2;

Ruby on Rails 3.0.0。

回答

11

Intereting,我觉得Rails需要一个补丁。我稍后会与核心人员谈论它。在此期间,以下应该工作:

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

它的工作。非常感谢,** raggi **。 – Shamaoke 2010-09-26 13:19:46

+0

这里讨论了Rails问题:https://github.com/rails/rails/issues/3470 – 2012-06-13 08:40:38