Rails范围路由允许nil作为路径段?

时间:2013-06-05 11:44:54

标签: internationalization ruby-on-rails-3.2 rails-i18n

我想根据以下网站制作我的Rails3.2应用程序i18n,并在URL路径中包含locale参数。 (http://www.wordchuck.com/en/website/blogs/5

我实施了

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]”/ nodes / explore“”错误。

我想知道可能是:locale是nil 要使nil:locale enable并在以下情况下默认为“en”:locale为nil,我该怎么办?

1 个答案:

答案 0 :(得分: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