2017-08-28 58 views
0

我需要语言环境添加的,而不是所有的更新和*_path电话*_url我想一个default_url_options方法添加到我的应用程序控制器的所有路由,这是我使用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

回答

0

有y ou尝试使用名称空间?

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

而且刚刚发现这个,貌似这些家伙已经解决了这个问题: https://stackoverflow.com/a/8237800/3753556

+0

您链接这个答案是我使用的是什么,也为它增加了一个超类所有的命名空间是行不通的控制器 –