首先 - 在实践中,您可能不应该允许无限 # 的参数。即使像 100 这样的值也可能会破坏您的页面和/或导致性能问题,并使您面临 DOS 攻击。我会选择某种合理/实用的限制并记录/执行它(例如 10、12 或任何对您的应用程序有意义的)。在大约 2k 个字符时,您将开始遇到 URL-length issues。
下一步 - URL 是否有任何灵活性?名称往往会发生变化,因此如果您希望 URL 随时间推移而工作,您需要对它们中的每一个进行 slug-ify(使用 friendly-id 之类的东西),以便您可以跟踪随时间的变化。例如 - 您可以使用不可变/唯一的 ID 和人类可读的名称吗?
无论如何,Rails 为 URL 路由提供了一个非常灵活的系统。您可以通过Rails routing documentation 阅读有关各种选项/配置的更多信息。
默认情况下,Dynamic Segment 支持示例中的文本,因此(取决于您的控制器名称)您可以执行以下操作:
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