2015-08-28 82 views
2

我使用虾宝石生成PDF和我有我的应用程序显示页面此链接show.html.slim = link_to "PDF", post_path(@post, :format => 'pdf'), :target => "_blank保存对虾PDF Rails应用程序

我柱控制器show方法

def show 
@post = post.find(params[:id]) 
respond_to do |format| 
    format.html # show.html.erb 
    format.pdf { render :layout => false} 
end 

我的show.pdf.prawn页面有:

font("app/assets/fonts/DejaVuSans.ttf") do 

table [["Title \n #{@post.title}"], [''], ['Summary']], cell_style: { size: 14, bold: :true }, row_colors: ['F0F0F0'], column_widths: [540] do 
row(0).align = :center 
row(0).size = 16 
row(0).background_color = '93AAD9' 
self.header = true 

row(2).align = :center 
row(2).background_color = 'DEB8A5' 

end 

......

我希望在我的应用程序中显示页面时,将pdf自动保存到app/assets/pdf folder

请建议。

回答

0

添加虾后respond_to块保存:

filename = File.join(Rails.root, "app/assets/pdf_folder", "x.pdf") 
send_file filename, :filename => "x.pdf", :type => "application/pdf" 
0

看来你可以使用render_to_string为最小修改你的架构:

# controller code 
format.pdf do 
    filename = Rails.root + "app/assets/posts/#{params[:id].to_i}.pdf" 
    unless File.exists?(filename) 
    File.write(filename, render_to_string) 
    end 

    send_file filename, :filename => "post_#{params[:id].to_i}.pdf", :type => "application/pdf" 
end