我的路线中有重定向链接,如下所示。
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'
但是有没有办法在不使用块的情况下以较短的形式插入可选参数?
答案 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" }
还可以设置默认值。