Ruby on rails Rails路由在重定向中插入可选参数

Ruby on rails Rails路由在重定向中插入可选参数,ruby-on-rails,Ruby On Rails,我有重定向链接在我的路线如下 match '(:locale)/products', to: redirect('%{locale}/products/new', status: 301), via: 'get' 这里param:locale是可选的 因此,如果param:locale为空,我会收到错误消息: key{locale} not found 一个可能的解决方法是在重定向中使用block,在这里我可以添加自定义逻辑,例如 match '(:locale)/products', t

我有重定向链接在我的路线如下

match '(:locale)/products', to: redirect('%{locale}/products/new', status: 301),  via: 'get'
这里param
:locale
是可选的

因此,如果param
:locale
为空,我会收到错误消息:

key{locale} not found
一个可能的解决方法是在重定向中使用block,在这里我可以添加自定义逻辑,例如

match '(:locale)/products', to: redirect{ |params|"#{params[:locale]}/products/new"}, status: 301,  via: 'get'

但是,有没有办法在不使用块的情况下以较短的形式插入可选参数?

我已经用我的模型用户尝试过了。 看起来像

Rails.application.routes.draw do
  resources :users
  get '(:locale)/users' => redirect( '/users?locale=%{locale}', :status => 301 )
  # get '(:locale)/users' => redirect { | params | "/users?locale=#{params[:locale]}" }, :status => 301, :constraints => { :locale => /[a-z]{2,2}/i }
  root 'welcome#index'
end
首先,当:locale丢失时,我没有收到错误,因为前面的“resources”和第二个可以设置约束以确保参数存在

这有用吗

更新

get '(:locale)/users' => redirect( '/users?locale=%{locale}', :status => 301 ), :defaults => { :locale => "de" }

还可以设置默认值。

否,不可以。如果我设置了约束,那么简单的路由将不匹配,它显然不会产生错误。那样的话,我将不得不做2条路线,一条为缺少的地区,另一条为提供。这样,我们根本就不会利用可选参数<代码>:默认值解决问题。如果根本不需要设置区域设置,也可以将其设置为
{:locale=>“”}
。认可的。谢谢