gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:39:49 31 4
gpt4 key购买 nike

使用rails 2。我想要一个指向当前页面(无论它是什么)的链接,该链接使所有参数保持不变,但将格式更改为“csv”。 (可以通过在参数中设置 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),则中断。我可以沿着这些思路想出更多黑客的东西,例如测试请求是否有参数,但我认为必须有更好的方法。

干杯,最大

编辑 - 顺便说一句,不能保证当前页面可以有一个与其关联的命名路由,以防相关:我们可以通过通用的“/: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 - 你上面的方法有一个严重的问题 - 它直接修改参数,所以如果你在调用这个使用参数的方法后得到任何东西(例如 will_paginate 链接),那么它将获得你使用的修改后的版本建立您的链接。我将其更改为在参数上调用 .dup,然后修改重复的对象,而不是直接修改参数。 – @马克斯·威廉姆斯

关于ruby-on-rails - 获取当前页面的 url,但格式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5913525/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com