簡體   English   中英

從Rails中的route.rb中重定向

[英]Redirect from within routes.rb in Rails

我正在為數據庫中的記錄創建名稱更改歷史記錄。 因此,如果有人更改了自己擁有的商品的名稱,則舊的URL仍然有效。

我正在嘗試這樣的事情:

get '/:id', to: "services#show", as: 'show_service', constraints: lambda {|request|
  urls = ['a', 'b', 'c']
  if urls.include? params[:id]
    puts "Yep - this works."
    return redirect latest_url
  else
    # Nothing matches, this service doesn't exist.
    return false
  end
}

此路線可以通過兩種方式完成:

  1. 工作:它什么也沒有找到並返回false,因此路由執行順序繼續下降。

  2. 不起作用:它找到了東西並重定向到路線歷史中的最新名稱。

該返回重定向Latest_url根本沒有重定向-有什么建議嗎?

由於針對每條路線的測試均在第一場比賽中停止,因此擁有兩條路線更為簡單:

# legacy name support
get '/:id', to: redirect(latest_url), constraints: lambda { |request|
  urls = ['a', 'b', 'c']
  urls.include? request.params[:id]
}

# latest and greatest
get '/:id', to: "services#show", as: 'show_service'

PS:我還建議這很復雜,足以保證它是自己的班級來響應matches? 而不是內聯lambda,請參見http://guides.rubyonrails.org/routing.html#advanced-constraints

PPS:根據用例的復雜性,值得一看的是friendly_id gem及其歷史模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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