link_to中的区域设置不起作用

时间:2014-01-20 15:51:57

标签: ruby-on-rails

目标

自动生成/en-US/welcome/这样的网址,不带任何手动前缀或类似内容。

问题

只是不工作。我的网址中没有区域设置。

场景

我的application_controller.rb已经有default_url_options()方法:

def default_orl_options(options = {})
  { locale: I18n.locale }
end

这是我的routes.rb

[...]

get "home/index"

root to: 'home#index'

get '/:locale' => 'home#index'

scope '/:locale' do
  resources :home
end

[...]

最后,要显示一个链接:

[...]

<%= link_to '', url_for('buy') %>

[...]

结果呢? http://localhost:3000/buy/ 我只希望locale为网址添加前缀。

到现在为止,谢谢!

2 个答案:

答案 0 :(得分:0)

在较新的应用中,首选格式为:

Rails.application.routes.default_url_options[:locale]= I18n.locale

应用指南

  • 创建名为config/initializers/default_url_opts.rb
  • 的文件
  • 将上述示例添加到文件中,然后重新启动应用程序。

答案 1 :(得分:0)

我遇到了与您完全相同的问题,尽管我已关注Rails guidelines for this(在default_url_options中定义了ApplicationController方法,并在I18n.locale中设置了before_action )。

我的问题是有人在default的范围内放了一个routes.rb参数,如下所示:

scope "(:locale)", locale: /en|pt-br|es/, defaults: { locale: ''}
...

作为this question points out(读作'可能的问题'),defaults,尽管有名称,但实际上覆盖了该语言环境参数。结果是我只在link_to(使用url_for)中获得了本地化链接,如果我在其参数中特别指定了区域设置,类似于link_to(dashboard_path(locale: I18n.locale)),这正是设置{{应用程序控制器中的1}}应该避免我不得不这样做。

从routes.rb中的范围块中删除default_url_options是解决方案的一半;另一半是ApplicationController中的改进代码#default_url_options

defaults

最后一个来源是this answer