【发布时间】:2011-07-24 20:25:28
【问题描述】:
如何在不渲染此文件的情况下渲染发送给客户的文件(PDF、CSV 等)?
例如,想象一个学生控制器(使用脚手架创建),我们有“新”表单和“创建”操作:
def new
@student = Student.new
respond_to do |format|
format.html # new.html.erb
end
end
def create
@student = Student.new(params[:student])
respond_to do |format|
if @student.save
flash[:notice] = 'Student created'
format.html { redirect_to(@student) }
else
format.html { render :action => "new" }
end
end
end
成功创建学生后,它将重定向到“显示”模板。那没问题! 但我需要发送给客户 - 例如 - 一个 PDF 文件,然后呈现“显示”操作。
此 PDF 文件就像客户的创建收据。
额外信息:现在使用 Prawn 制作 PDF 并通过如下代码发送给客户:
respond_to do |format|
format.pdf { render :layout => false }
end
简而言之,我需要填写表格、创建学生、将 PDF 发送到浏览器(作为创建收据)并呈现“显示”操作以显示创建的学生。
非常感谢。
【问题讨论】:
-
让我看看我是否理解您要查找的内容,您想向用户显示“show.html.erb”文件,但您还希望用户下载静态 PDF 文件其他细节?
-
是的。我如何使用 redirect_to format.pdf 将 PDF 发送给客户端,但我想 sned 这个并立即显示“show.html.erb”。
-
您不能在控制器中同时进行两次渲染(一个 pdf 和一个页面)。要么发送 pdf,要么渲染另一个页面。
-
@apneadiving,非常感谢您的回答。我知道我只能调用一个渲染或重定向,但这是我的问题的目标:如何发送此 PDF 并显示此页面?
-
发送 PDF == 渲染 1. 显示页面 == 渲染 2. 不能一次性完成。
标签: ruby-on-rails ruby-on-rails-3 pdf render prawn