對于比較多個專案的路由,最好的結構方式是什么?
下面是URL的例子。https://versus.com/en/microsoft-teams-vs-slack-vs-somalia
如何在 routes.rb 檔案中實作這一點?在互聯網上真的找不到任何關于ruby gems的資訊。我唯一能想到的是帶有可選引數的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-'/span>)
# generate the comparison_items array的比較。
end
uj5u.com熱心網友回復:
首先--你可能不應該在實踐中允許無限數量的引數。即使是像100個這樣的引數也可能破壞你的頁面和/或導致性能問題,并使你受到DOS攻擊。我會選擇某種合理的/實用的限制,并記錄/執行它(比如10、12或任何對你的應用有意義的東西)。在大約2K個字符時,您將開始遇到URL長度的問題。
接下來 - URL 是否有任何靈活性?名稱往往會發生變化,因此,如果您希望 URL 能夠長期使用,您需要對每個 URL 進行標記(使用類似于 friendly-id 的東西),以便您能夠跟蹤一段時間內的變化。例如 - 您是否可以使用不可變的/唯一的 ID 和人類可讀的名稱?
在任何情況下,Rails 都為 URL 路由提供了一個非常靈活的系統。 您可以通過Rails 路由檔案閱讀更多關于各種選項/配置的資訊。
默認情況下,動態段支持像您的示例中那樣的文本,因此(根據您的控制器名稱)您可以做如下事情:
get 'en/:items'/span>, to: 'items#compare'
如果有幫助的話,你可以添加一個自定義的約束重定式,以保證引數看起來像你期望的那樣(例如,word-with-dashes-vs-another-vs-something-else)
獲取'en/:items', to: 'items#compare', constraints: { items: /(? :(? :[A-Z-] )vs) (? :[A-Z-] )/ }
然后,在你的控制器中,你可以隨意決議出獨立的字串。比如說......
def compare
items = params[: items].split('-vs-')
end。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/313785.html
標籤:
