[英]Rails routes interpolate optional params in redirect
我的路線中有重定向鏈接,如下所示。
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丟失時,我沒有收到錯誤消息,因為之前和之后的“資源”都可以設置約束以確保參數在那里。
這有幫助嗎?
UPDATE
get '(:locale)/users' => redirect( '/users?locale=%{locale}', :status => 301 ), :defaults => { :locale => "de" }
也可以設置默認值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.