使用轨道2.我想要一个链接到当前页面(无论是什么),保持所有参数相同,但将格式更改为“csv”. (设置格式可以通过在params中使用format = csv或将.csv放在路径的末尾)来完成.例如
posts/1 => posts/1.csv OR posts/1?format=csv posts?name=jim => posts.csv?name=jim OR posts?name=jim&format=csv
我试过这个是一个黑客的尝试
request.url“& format = csv”
如果当前URL中有参数(上述情况2),但如果没有(情况1)则会中断,则该功能正常.我可以通过这些方式提出更多的hacky的东西,例如测试请求是否具有参数,但我认为必须有一个更好的方法.
欢呼声,最大
编辑 – btw,不能保证当前页面可能有一个与之相关联的命名路由,以防相关:我们可以通过通用的“/:controller /:action /:id”路由到达目录.
解决方法
<%= link_to "This page in CSV",{:format => :csv } %> <%= link_to "This page in PDF",{:format => :pdf } %> <%= link_to "This page in JPEG",{:format => :jpeg } %>
编辑
添加帮手
def current_url(new_params) url_for :params => params.merge(new_params) end
然后使用这个
<%= link_to "This page in CSV",current_url(:format => :csv ) %>
编辑2
或改善你的黑客:
def current_url(new_params) params.merge!(new_params) string = params.map{ |k,v| "#{k}=#{v}" }.join("&") request.uri.split("?")[0] + "?" + string end
编辑
重要! @floor – 你的方法有一个严重的问题 – 它直接修改参数,所以如果你有任何调用这个方法后使用params(例如will_paginate链接),那么将获得你使用的修改版本建立你的链接我改变它在params上调用.dup,然后修改重复的对象,而不是直接修改params. – @麦克威廉姆斯
原文地址:https://www.jb51.cc/ruby/273800.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。