将查询string参数添加到link_to

我很难添加查询string参数link_to UrlHelper。 我有一个索引视图,例如,具有用于sorting,筛选和分页的UI元素(通过will_paginate)。 will_paginate插件正确地pipe理查询string参数的页面内持久性。

是否有一个自动的机制来添加查询string参数给一个命名的路由,或者我需要手动这样做? 对这个看起来简单的构造进行了大量的研究,让我一无所知。

编辑

一些挑战:

  1. 如果我有两个查询string参数,桶和sorting,如何在link_to中为其中的一个设置特定的值,同时保留另一个的当前值? 例如:

    <%= link_to "0", profiles_path(:bucket => '0', :sorting=>?? ) %> 
  2. 如果我有多个查询string参数,bucket&sorting&page_size,并且我想将值设置为其中之一,有没有办法“自动”包含其余参数的名称和值? 例如:

     <%= link_to "0", profiles_path(:bucket => '0', [include sorting and page_size name/values here] ) %> 
  3. will_paginate插件自动pipe理页面variables和其他查询stringvariables。 似乎没有用于pipe理页面大小的自动UI元素。 虽然我看到代码来创build页面大小的select列表,我宁愿有这样的元素(如SO)。 这个挑战的一部分与#2有关,部分涉及基于logging的存在/不存在来隐藏/显示这个UI元素。 换句话说,如果页面中有logging,我只想包含页面大小的链接。 此外,我更喜欢自动包含其他QSvariables(即页面,存储桶,sorting),而不必在link_to中包含它们的名称。

link_to上的API文档显示了将querystrings添加到named和oldstyle路由的一些示例。 这是你想要的吗?

link_to也可以产生与锚或查询string的链接:

 link_to "Comment wall", profile_path(@profile, :anchor => "wall") #=> <a href="/profiles/1#wall">Comment wall</a> link_to "Ruby on Rails search", :controller => "searches", :query => "ruby on rails" #=> <a href="/searches?query=ruby+on+rails">Ruby on Rails search</a> link_to "Nonsense search", searches_path(:foo => "bar", :baz => "quux") #=> <a href="/searches?foo=bar&amp;baz=quux">Nonsense search</a> 

如果你想快速和肮脏的方式,不担心XSS攻击,使用params.merge保持以前的参数。 例如

 <%= link_to 'Link', params.merge({:per_page => 20}) %> 

请参阅: https : //stackoverflow.com/a/4174493/445908

否则,检查这个答案: params.merge和跨站点脚本

如果你想保留现有的参数,而不是暴露自己的XSS攻击,一定要清理参数散列,只留下你的应用程序可以发送的参数:

 # inline <%= link_to 'Link', params.slice(:sort).merge(per_page: 20) %> 

如果您在多个地方使用它,请清洁控制器中的参数:

 # your_controller.rb @params = params.slice(:sort, :per_page) # view <%= link_to 'Link', @params.merge(per_page: 20) %> 

如果你想通过一个块,比如说一个graphicsbutton,如下所示:

 <%= link_to my_url, class: "stuff" do %> <i class="glyphicon glyphicon-inbox></i> Nice glyph-button <% end %> 

然后通过querystrings params可以通过完成:

 <%= link_to url_for(params.merge(my_params: "value")), class: "stuff" do %> <i class="glyphicon glyphicon-inbox></i> Nice glyph-button <% end %>