params.merge而不是:overwrite_params给出不同的URL

时间:2014-01-22 15:53:36

标签: ruby-on-rails ruby-on-rails-3

在我的旧Rails 2.3应用程序中,我有类似的东西:

link_to 'Portuguese', url_for(:overwrite_params => { :lang => 'pt' })

将网格格式化为:

... / PT

现在我已升级到Rails 3.0 :overwrite_params不再起作用,他们说可以使用params.merge来获得相同的结果。 这是真的,我登陆的页面是相同的,但

link_to 'Portuguese', params.merge(:lang => 'pt')

给我的URL类型:

... /?LANG = PT

我如何保持与以前相同的网址?

2 个答案:

答案 0 :(得分:0)

你可以使用匹配声明。在routes.rb文件中,您需要提及类似

的内容
get "sign_up/:lang" => "users#new"

我在控制台中尝试了这个

1.9.3-p429 :001 > include Rails.application.routes.url_helpers

1.9.3-p429 :011 > url_for(:only_path => true, :controller => 'users', :action = 'new' , :lang=>'pt')

=> "/sign_up/pt"

以这种方式,您将参数lang传递为'/ pt'而不是'/?lang = pt'

答案 1 :(得分:0)

我有这种看起来很可怕的解决方法:

定义匹配路线后

match '(/:lang)', to: 'home#index', as: :home

我创建了它的链接:

link_to "Portuguese", URI(request.referer).path + "pt"