構建比較多個專案的路線的最佳方法是什么?
這是 URL 示例:https ://versus.com/en/microsoft-teams-vs-slack-vs-somalia
如何在 routes.rb 檔案中實作這一點?在互聯網上真的找不到任何關于紅寶石的東西。我唯一能想到的是帶有可選引數的 url,但是如果引數的數量是無限的呢?
uj5u.com熱心網友回復:
你將不得不a-vs-b-vs-c自己決議。
所以在 routes.rb 中,你會有類似的東西:
get 'compare/:compare_string', to 'compare#show'
然后你會得到一個compare_string你必須決議的引數:
#in compare_controller.rb
def show
compare_items = params[:compare_string].split('-vs-')
# generate the comparison from the compare_items array
end
uj5u.com熱心網友回復:
首先 - 在實踐中,您可能不應該允許無限的引數。即使像 100 這樣的值也可能會破壞您的頁面和/或導致性能問題,并使您面臨 DOS 攻擊。我會選擇某種合理/實用的限制并記錄/執行它(如 10、12 或任何對您的應用程式有意義的)。在大約 2k 個字符時,您將開始遇到URL 長度問題。
下一步 - URL 是否有任何靈活性?名稱往往會發生變化,因此如果您希望 URL 隨著時間的推移而作業,您需要對它們中的每一個進行 slug-ify(使用類似friendly-id之類的東西),以便您可以跟蹤隨時間的變化。例如 - 您可以使用不可變/唯一的 ID 和人類可讀的名稱嗎?
無論如何,Rails 為 URL 路由提供了一個非常靈活的系統。您可以通過他們的Rails 路由檔案了解更多關于各種選項/配置的資訊。
默認情況下,動態段支持示例中的文本,因此(取決于您的控制器名稱)您可以執行以下操作:
get 'en/:items', to: 'items#compare'
如果有幫助,您可以添加自定義正則constraint運算式以保證引數看起來像您期望的那樣(例如word-with-dashes-vs-another-vs-something-else)
get 'en/:items', to: 'items#compare', constraints: { items: /(?:(?:[A-Z-] )vs) (?:[A-Z-] )/ }
然后,在您的控制器中,您可以根據需要決議出單獨的字串。就像是...
def compare
items = params[:items].split('-vs-')
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/416207.html
標籤:
上一篇:如何更新rails中空列的值
下一篇:Ruby陣列元素
