Ruby on rails 链接_到';行不通 目标
自动创建类似于Ruby on rails 链接_到';行不通 目标,ruby-on-rails,Ruby On Rails,自动创建类似于/en-US/welcome/的URL,不需要任何手动前缀或类似的内容 问题 只是不工作。我的URL中似乎没有区域设置 情景 我的application\u controller.rb已经具有default\u url\u options()方法: def default_orl_options(options = {}) { locale: I18n.locale } end 这是我的路线。rb: [...] get "home/index" root to: 'hom
/en-US/welcome/
的URL,不需要任何手动前缀或类似的内容
问题
只是不工作。我的URL中似乎没有区域设置
情景
我的application\u controller.rb
已经具有default\u url\u options()
方法:
def default_orl_options(options = {})
{ locale: I18n.locale }
end
这是我的路线。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
在URL前面加前缀。
现在,谢谢 在较新的应用程序中,首选格式为:
Rails.application.routes.default\u url\u options[:locale]=I18n.locale
应用程序说明
- 创建一个名为
config/initializers/default\u url\u opts.rb的文件
- 将上述示例添加到文件中,然后重新启动应用程序
ApplicationController
中定义default\u url\u options
方法,并在操作之前在中设置I18n.locale
)
我的问题是有人在routes.rb
的作用域中放置了一个default
参数,类似这样:
scope "(:locale)", locale: /en|pt-br|es/, defaults: { locale: ''}
...
作为(阅读“可能的问题”),此处的默认值
,尽管名称不同,实际上覆盖了该区域设置参数。结果是,如果我在参数中特别指定了区域设置,我只在link\u to
(使用url\u for
)中获得本地化链接,类似于link\u to(dashboard\u path(locale:I18n.locale))
,这正是ApplicationController中设置default\u url\u options
应该避免我做的事情
从routes.rb中的范围块中删除默认值
,是解决方案的一半;另一半是ApplicationController#default(默认)url(选项)中的改进代码
def default_url_options(options = {})
{ locale: I18n.locale == I18n.default_locale ? nil : I18n.locale }.merge(options)
end
最后一个的来源是。这是什么“购买”
路线?如果您编写
,会发生什么情况?@MarekLipka没有与之匹配的路由{:controller=>“home”,:action=>“show”,:locale=>:“en-US”}缺少所需的键:[:id]
那么,这是什么'buy'
路由?它必须只是一个普通页面。在routes.rb
中没有关于buy
的内容。我应该创造一些东西吗?试试看。类似于get'/:locale/buy'
的东西应该可以工作。我应该把它放在application\u controller.rb
上吗?在一种方法中?如果是的话,那是哪一个?@guilhermoderdenge通常我会创建一个初始值设定项,然后把它放在那里。我对Rails非常陌生。你能再往前走一点吗?谢谢你Jordon,但不幸的是没有成功。结果是相同的-没有URL的区域设置。