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=>“”}
。认可的。谢谢