[英]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
}
此路線可以通過兩種方式完成:
工作:它什么也沒有找到並返回false,因此路由執行順序繼續下降。
不起作用:它找到了東西並重定向到路線歷史中的最新名稱。
該返回重定向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.