Ruby 在 Rails - 使用 "Format" 作为 URL GET 参数?

Ruby On Rails - Use "Format" As A URL GET Parameter?

我有一个搜索页面,当用户添加或删除过滤器时,我会更新页面上的 URL 参数。这使我可以深入 link 页面(即转到 /search?location=new+york&time=afternoon 将设置 locationafternoon 过滤器)。

我还有一个名为 format 的过滤器。我注意到将 ?format=whatevervalue 传递给 URL 然后使用该参数重新加载页面会导致 Rails 到 return 出现 Completed 406 Not Acceptable 错误。 format 似乎是保留的 Rails URL 参数。

是否可以为特定端点取消保留此参数名称?

在 Ruby 的 URL 上下文中,在 Rails 上至少有四个保留参数名称:controllermethodid, format.

您不能将这些密钥用于其预期用途以外的任何其他用途。

如果您尝试这样做,您将覆盖 Rails 内部设置的值。在您的示例中,通过设置 ?format=whatevervalue 覆盖默认格式 (html),您的应用程序将尝试查找并呈现 whatevervalue 模板而不是 html 格式的模板。这显然行不通。

有趣的事实:除了像 /users/123/edit 这样使用默认的 Rails 路径格式,您还可以使用查询参数,如下所示:/?controller=users&id=123&method=edit&format&html.

我的建议是:不要试图对抗 Rails 惯例。每当您尝试绕过基本的 Rails 约定时,它都会在以后伤害您,因为它会使更新变得更加困难,常见的 gem 可能会损坏,并且会发生意想不到的副作用。只需为该参数使用另一个名称。