当前位置:  开发笔记 > 编程语言 > 正文

向link_to添加查询字符串参数

如何解决《向link_to添加查询字符串参数》经验,为你挑选了3个好方法。

我很难在link_to UrlHelper中添加查询字符串参数.我有一个索引视图,例如,它具有用于排序,过滤和分页的UI元素(通过will_paginate).will_paginate插件正确管理查询字符串参数的页内持久性.

是否有自动机制将查询字符串参数添加到给定命名路由,或者我是否需要手动执行此操作?对这个看似简单的结构的大量研究让我一无所知.

编辑

一些挑战:

    如果我有两个查询字符串参数,存储桶和排序,如何在link_to中为其中一个设置特定值,同时保留另一个的当前值?例如:

    <%= link_to "0", profiles_path(:bucket => '0', :sorting=>?? ) %>
    

    如果我有多个查询字符串参数,bucket&sorting&page_size,并且我想将值设置为其中之一,是否有办法'自动'包含其余参数的名称和值?例如:

    <%= link_to "0", profiles_path(:bucket => '0', [include sorting and page_size name/values here] ) %>
    

    will_paginate插件自动管理其页面变量和其他查询字符串变量.似乎没有用于管理页面大小的自动UI元素.虽然我已经看到了创建页面大小选择列表的代码,但我宁愿为此设置A元素(如SO).这个挑战的一部分与#2有关,部分与基于记录的存在/不存在隐藏/显示该UI元素有关.换句话说,如果有页面记录,我只想包含页面大小的链接.此外,我更喜欢自动包含其他QS变量(即页面,存储桶,排序),而不必在link_to中按名称包含它们.

Fred.. 326

link_to上的API文档显示了向命名和旧样式路由添加查询字符串的一些示例.这是你想要的吗?

link_to 也可以生成锚点或查询字符串的链接:

link_to "Comment wall", profile_path(@profile, :anchor => "wall")
#=> Comment wall

link_to "Ruby on Rails search", :controller => "searches", :query => "ruby on rails"
#=> Ruby on Rails search

link_to "Nonsense search", searches_path(:foo => "bar", :baz => "quux")
#=> Nonsense search


Siwei Shen 申.. 50

如果您想要快速而肮脏的方式并且不担心XSS攻击,请使用params.merge以保留以前的参数.例如

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

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

否则,请检查以下答案:params.merge和跨站点脚本



1> Fred..:

link_to上的API文档显示了向命名和旧样式路由添加查询字符串的一些示例.这是你想要的吗?

link_to 也可以生成锚点或查询字符串的链接:

link_to "Comment wall", profile_path(@profile, :anchor => "wall")
#=> Comment wall

link_to "Ruby on Rails search", :controller => "searches", :query => "ruby on rails"
#=> Ruby on Rails search

link_to "Nonsense search", searches_path(:foo => "bar", :baz => "quux")
#=> Nonsense search



2> Siwei Shen 申..:

如果您想要快速而肮脏的方式并且不担心XSS攻击,请使用params.merge以保留以前的参数.例如

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

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

否则,请检查以下答案:params.merge和跨站点脚本


不要这样做,它会打开你的xss攻击.
@Yarin任意打印已经由用户提交的页面中的参数(并且不一定要清理)允许某人使用编码Javascript的链接链接到您的站点.然后将Javascript打印到页面中并执行,可能会窃取cookie或执行恶意任务.Rails通常非常擅长清理打印到页面中的内容,但最好是安全而不是抱歉
@Yarin在[这个问题](http://stackoverflow.com/questions/12271218/params-merge-and-cross-site-scripting)有一个很好的解释.

3> Greg Funtuso..:

如果你想保留现有的参数并且不让自己暴露于XSS攻击,请务必清除params哈希值,只留下你的应用程序可以发送的参数:

# 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) %>

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有