加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 20:37:59 所属栏目:百科 来源:网络整理
导读:使用轨道2.我想要一个链接到当前页面(无论是什么),保持所有参数相同,但将格式更改为“csv”. (设置格式可以通过在params中使用format = csv或将.csv放在路径的末尾)来完成.例如 posts/1= posts/1.csv OR posts/1?format=csvposts?name=jim = posts.csv?name=
使用轨道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. – @麦克威廉姆斯

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读