Rails:在link_to中保留GET查询字符串参数

Vin*_*ent 45 parameters routing ruby-on-rails helpers

我的应用程序中有一个典型的搜索工具,它返回一个结果列表,可以对其进行分页,排序,使用不同的records_per_page值进行查看等.每个选项都由查询字符串中的参数控制.一个简化的例子:

/search?q=test&page=2
Run Code Online (Sandbox Code Playgroud)

现在说我需要显示一组将records_per_page值设置为10,20,30的链接.每个链接必须包含现有的查询参数,这些参数可以是一个非常长的集合,加上一个新的per_page参数.

/search?q=test&page=2& ... &per_page=10
/search?q=test&page=2& ... &per_page=20
/search?q=test&page=2& ... &per_page=30
Run Code Online (Sandbox Code Playgroud)

是否有一个简单的方法只使用link_to帮助器或我需要以某种方式解析并重现先前请求的查询字符串?

Vin*_*ent 64

link_to 'Link', request.query_parameters.merge({:per_page => 20})
Run Code Online (Sandbox Code Playgroud)

  • 但是你可以通过使用`request.query_parameters`而不是`request.parameters`来避免这种情况 (13认同)
  • 如果查询参数需要关联数组或嵌套哈希,请使用`deep_merge` (2认同)

小智 22

link_to 'Link', params.merge({:per_page => 20})
Run Code Online (Sandbox Code Playgroud)


Cle*_*ens 18

将新参数与查询参数合并而不与所有参数(包括通过路径获得的参数)合并的最简单方法是与request.query_parameters合并

link_to 'Search', search_path(request.query_parameters.merge({ per_page: 20 }))
Run Code Online (Sandbox Code Playgroud)

否则,您最终会使用复制路径参数的查询字符串,例如,?action=index&controller=products&foo=bar而不是?foo=bar.