2013-06-05 30 views
0

我想根据以下网站制作我的Rails3.2应用程序i18n,并在URL路径中包含区域设置参数。 (http://www.wordchuck.com/en/website/blogs/5Rails作用域路由允许nil作为路径段吗?

我实现

scope ':locale' do 
    resources :nodes 
end 

等方法

def set_locale 
    I18n.locale = params[:locale] if params.include?('locale') 
end 


def default_url_options(options = {}) 
    options.merge!({ :locale => I18n.locale }) 
end 

在我application_controller.rb。

现在我可以证实,

http://myhost/ja/nodes/explore or http://myhost/en/nodes/explore 

通,但

http://myhost/nodes/explore 

了 “无路由匹配[GET] ”/节点/探索“” 错误。

我想知道可能是:locale是零。
要使nil:locale启用,并且在locale为零时默认为“en”,我应该怎么做?

回答

0

随着您建立路线的方式,nodes资源要求存在区域设置。

要解决这个问题,你可以简单的:locale范围之外创造更多的航线有:

scope ':locale' do 
    resource :nodes 
end 

resource :nodes 

原则上,当当前的区域没有明确设置默认的区域将被使用。如果您的应用程序中没有更改任何内容,则默认为:en

否则,您可以在set_locale方法明确地设置这样的:

def set_locale 
    I18n.locale = params.include?('locale') ? params[:locale] : :en 
end 
+0

哦,复制“资源节点”有/没有范围,你说一个可行的办法,但其实我有更多的“资源“和”匹配“路由语句,那么是不是还有其他可扩展的方法?我想设置默认的语言环境技巧只有在路由通过后才起作用... – linzhixing

+0

我不知道您可以定义路由以具有可选作用域。 – tigrish