【问题标题】:Rails scope routing allows nil as a path segment?Rails范围路由允许nil作为路径段?
【发布时间】:2013-06-05 11:44:54
【问题描述】:

我想根据以下站点制作我的 Rails3.2 应用程序 i18n,并在 URL 路径中包含一个语言环境参数。 (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 is nil。
当 :locale 为 nil 时,要使 nil :locale 启用并默认为“en”,我该怎么办?

【问题讨论】:

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


    【解决方案1】:

    根据您设置路线的方式,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
    

    【讨论】:

    • 哦,复制“资源节点”有/没有范围是你说的一种可能的方式,但实际上我有更多的“资源”和“匹配”路由语句,所以不存在任何其他可扩展的方法?我想设置默认语言环境技巧只有在路由通过后才有效......
    • 我不知道您可以定义路由以具有可选范围。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    相关资源
    最近更新 更多