2014-09-01 29 views
-2

我有一个包含项目列表和列表上方的页面我有多个链接充当过滤器。点击链接会导致一个Ajax请求被大量的URL参数触发。点击几个过滤器后置则params的任何例子:Rails应用程序太多参数

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

这是所有工作正常,但我觉得对URL的PARAMS非常凌乱,而后面的代码必须做检查,看看哪些则params的很多存在,合并新的,覆盖现有的等。

有没有更好的方式来完成这个没有URL参数。

我猜这样做的缺点是用户无法链接到特定的过滤视图,或者有没有一种方法可以实现呢?

回答

1

使用长查询字符串时,您有几个选项。如果这不是真的造成问题(如请求死亡),那么你应该问自己是否真的值得把它切换到别的东西上。

使用POST请求

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

link_to助手可以设置为使用不同的HTTP动词如下:

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

请确保您更新您的路线正确,如果你使用这种技术。

使用一个Ajax请求刷新页面

如果您配置过滤器全部是远程(阿贾克斯)链接,您可以更新过滤器和刷新内容页面的而没有改变URL。这是解决方案的基本格局:

  • 发送远程请求到服务器与当前的过滤选项
  • 更新基于这些过滤页面内容
  • 确保过滤器(和远程请求)将在用户的会话再次提交所有的当前参数的

商店过滤器

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

分享链接

就像你提到的,分享链接变得与所有这些解决方案的问题。您可以在页面上提供“共享此过滤器”部分以帮助缓解该问题。您可以在该部分放置一个用户可以复制的URL,其中包含重新创建过滤器的必要信息。链接可以包含完整的查询字符串或者可能包含过滤器的编码版本。

+0

感谢发布。没有机会通读它,但我会。非常感谢。 – rctneil 2014-09-04 16:23:06