我正在尝试格式化link_to
标记,以便使用以下respond_to块生成pdf文件(wicked_pdf gem):
respond_to do |format|
format.html
format.pdf do
render pdf: "file_name"
end
end
我已经用javascript方法创建了块。但是,渲染JS很容易:只在表单中添加remote: true
。
对于其他mime类型或respond_to块方法,我不知道如何编写我的link_to
标签让控制器知道我想要一个针对另一个的特定方法......
答案 0 :(得分:1)
respond_to
块确定要呈现哪种格式的方法之一是查看url的扩展名。例如,如果我在我的路线中:
Rails.application.routes.draw do
get 'home/index', as: 'home'
end
然后在我的控制器中:
class HomeController < ApplicationController
def index
respond_to do |format|
format.html { render inline: 'HTML' }
format.pdf { render inline: 'PDF' }
end
end
end
我可以使用format.pdf
扩展程序获取.pdf
:
$ curl http://localhost:3000/home/index.pdf
# PDF
$ curl http://localhost:3000/home/index.html
# HTML
创建link_to
时,您可以通过将其传递到url_for
(或您正在使用的任何指定路线助手)来告诉它使用哪个分机:
<%= link_to 'View the PDF', url_for(controller: 'home', action: 'index', format: 'pdf') %>
# => <a href="/home/index.pdf">View the PDF</a>
<%= link_to 'View the PDF', home_path(format: 'pdf') %>
# => <a href="/home/index.pdf">View the PDF</a>
我认为remote: true
的工作方式是设置接受标头。 Rails还用它来确定要调用的respond_to
项:
$ curl -H 'Accept: application/pdf' http://localhost:3000/home/index
# PDF