簡體   English   中英

Rails路由在重定向中插值可選參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM