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

时间:2016-02-15 09:27:32

标签: ruby-on-rails

我的路线中有重定向链接,如下所示。

match '(:locale)/products', to: redirect('%{locale}/products/new', status: 301),  via: 'get'

此处参数:locale是可选的。

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

key{locale} not found

可能的解决方法是在重定向中使用块,我可以添加自定义逻辑,例如。

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

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

1 个答案:

答案 0 :(得分:3)

我尝试过我的模特用户。 看起来像是

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丢失,因为之前和之后的“资源”你可以设置一个约束来确保参数在那里。

这有帮助吗?

<强>更新

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

还可以设置默认值。