Rails应用程序参数太多了

时间:2014-09-01 20:47:16

标签: ruby-on-rails parameters filter controller

我有一个包含项目列表的页面,在列表上方,我有多个充当过滤器的链接。单击链接会导致使用大量URL参数触发ajax请求。点击几个过滤器后的任何一组示例:

?letters=a-e&page=1&sort=alphabetically&type=steel

一切正常但我觉得URL上的params非常混乱,后面的代码需要做很多检查,看看哪些params存在,合并新的params,覆盖现有的params等。

如果没有网址参数,有没有更好的方法来实现这一目标。

我认为这样做的缺点是用户无法链接到特定的过滤视图,或者是否有办法实现这一目标?

1 个答案:

答案 0 :(得分:1)

使用长查询字符串时有几个选项。如果这不是真的导致问题(比如请求死亡),那么你应该问问自己,是否真的值得将其转换为其他东西。

使用POST请求

如果查询字符串的长度导致问题,您可以切换到使用POST请求而不是来自过滤器链接的GET请求。这将阻止URL包含过滤器参数,但您的控制器仍然可以以相同的方式处理参数。

可以将link_to助手设置为使用不同的HTTP谓词,如下所示:

link_to("My Filter", filter_path, method: :post)

如果您使用此技术,请确保正确更新路线。

使用Ajax请求刷新页面

如果将过滤器配置为所有远程(Ajax)链接,则可以更新过滤器并刷新页面的内容,而无需更改URL。这是解决方案的基本模式:

  • 使用当前过滤器选项向服务器发送远程请求
  • 根据这些过滤器更新页面内容
  • 确保过滤器(和远程请求)将再次提交所有当前参数

在用户的会话中存储过滤器

如果您在会话中存储当前过滤器,则只要用户访问基页,您就可以检索存储的过滤器并仅显示相应的信息。您的过滤器链接仍然可以是GET请求(包括冗长的查询字符串),但不是在过滤器请求之后呈现页面,而是重定向回主列表而不需要额外的查询参数。这会让用户觉得网址永远不会改变,甚至可以让你记住他们离开后的最后一个过滤器。

分享链接

正如您所提到的,共享链接成为所有这些解决方案的问题。您可以提供"分享此过滤器"页面上的部分,以帮助缓解这一点。您将放置用户可以在该部分中复制的URL,其中包含重新创建过滤器所需的信息。链接可以包含完整的查询字符串,也可以包含过滤器的编码版本。