使用长查询字符串时,您有几个选项。如果这不是真的造成问题(如请求死亡),那么你应该问自己是否真的值得把它切换到别的东西上。
使用POST请求
如果查询字符串的长度引起的问题,您可以切换到使用POST请求,而不是GET请求从您的过滤器链接。这将阻止URL包含过滤器参数,但您的控制器仍然可以用相同的方式处理参数。
的link_to
助手可以设置为使用不同的HTTP动词如下:
link_to("My Filter", filter_path, method: :post)
请确保您更新您的路线正确,如果你使用这种技术。
使用一个Ajax请求刷新页面
如果您配置过滤器全部是远程(阿贾克斯)链接,您可以更新过滤器和刷新内容页面的而没有改变URL。这是解决方案的基本格局:
- 发送远程请求到服务器与当前的过滤选项
- 更新基于这些过滤页面内容
- 确保过滤器(和远程请求)将在用户的会话再次提交所有的当前参数的
商店过滤器
如果您将当前过滤器存储在会话中,只要用户访问基本页面,就可以检索存储的过滤器并仅显示适当的信息。您的过滤器链接仍然可以是GET请求(包括冗长的查询字符串),但不是在过滤器请求之后呈现页面,而是不需要额外的查询参数即可重定向回主列表。这会让用户觉得URL永远不会改变,甚至可以让你记住他们最后的过滤器,如果他们离开了。
分享链接
就像你提到的,分享链接变得与所有这些解决方案的问题。您可以在页面上提供“共享此过滤器”部分以帮助缓解该问题。您可以在该部分放置一个用户可以复制的URL,其中包含重新创建过滤器的必要信息。链接可以包含完整的查询字符串或者可能包含过滤器的编码版本。
感谢发布。没有机会通读它,但我会。非常感谢。 – rctneil 2014-09-04 16:23:06