微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – 获取当前页面的URL,但格式不同

使用轨道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 举报,一经查实,本站将立刻删除。

相关推荐