【问题标题】:default_url_options is not overriding route defaultsdefault_url_options 没有覆盖路由默认值
【发布时间】:2017-08-28 16:52:44
【问题描述】:

我需要将语言环境添加到所有路由,而不是更新所有 *_path*_url 调用我正在尝试将 default_url_options 方法添加到我的应用程序控制器,这是我正在使用的方法

def default_url_options
  { locale: (I18n.locale == I18n.default_locale ? nil : I18n.locale.to_sym) }
end

这是我的路线文件:

locales = I18n.available_locales - [:en]
scope '(:locale)', locale: /#{locales.join('|')}/, defaults: { locale: I18n.default_locale } do
  get   '/login', to: 'sessions#new', as: :login
  root to: 'home#index'
  match '*a', to: '#missing_action', via: :all, as: nil
end

login_url 将呈现 http://localhost:3000/login,这不是我想要的。

如果我从路由范围中删除defaults:,我会得到正确的网址

  1. http://localhost:3000/login:locale 是我的默认语言环境时
  2. http://localhost:3000/es/login:locale 是我的:es

我正在使用Rails 5.1.3

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    您是否尝试过使用命名空间?

    namespace :locale, defaults: { locale: I18n.default_locale } do
    

    也刚刚找到这个,看起来这些家伙已经解决了它: https://stackoverflow.com/a/8237800/3753556

    【讨论】:

    • 你链接的这个答案是我正在使用的,而且命名空间也不起作用,因为它为所有控制器添加了一个超类
    猜你喜欢
    • 2015-04-22
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2020-07-28
    • 2012-04-02
    • 2023-04-01
    • 2011-06-19
    • 1970-01-01
    相关资源
    最近更新 更多