使用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
Run Code Online (Sandbox Code Playgroud)
我试着用这个hacky尝试
request.url+"&format=csv"
如果当前网址中存在参数(上面的情况2),则可以正常工作,但如果没有(案例1)则会中断.我可以在这些方面提出更多的hacky内容,例如测试请求是否有params,但我认为必须有一个更好的方法.
干杯,最大
编辑 - 顺便说一句,它不保证当前页面可以有一个与之关联的命名路由,如果相关:我们可以通过通用的"/:controller /:action /:id"路由到达那里.
fl0*_*00r 24
<%= link_to "This page in CSV", {:format => :csv } %>
<%= link_to "This page in PDF", {:format => :pdf } %>
<%= link_to "This page in JPEG", {:format => :jpeg } %>
Run Code Online (Sandbox Code Playgroud)
编辑
添加助手
def current_url(new_params)
url_for :params => params.merge(new_params)
end
Run Code Online (Sandbox Code Playgroud)
然后用这个
<%= link_to "This page in CSV", current_url(:format => :csv ) %>
Run Code Online (Sandbox Code Playgroud)
编辑2
或改善你的黑客:
def current_url(new_params)
params.merge!(new_params)
string = params.map{ |k,v| "#{k}=#{v}" }.join("&")
request.uri.split("?")[0] + "?" + string
end
Run Code Online (Sandbox Code Playgroud)
编辑
重要!@floor - 你的方法有上面一个严重的问题 - 它直接修改参数,可以因此,如果你已经到使用PARAMS(例如will_paginate链接)调用此方法后得到了什么,然后,将让你用修改后的版本建立你的链接.我将其更改为在params上调用.dup然后修改重复的对象而不是直接修改params. - @Max Williams
小智 8
您可以使用:
link_to "text of link", your_controller_path(format:'csv',params: request.query_parameters)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8067 次 |
| 最近记录: |