如何使用wicked_pdf gem使用html view / partial to pdf view?

时间:2017-07-26 14:13:52

标签: ruby pdf wicked-pdf

def foo    
  respond_to do |format|
    format.html { render layout: 'application' }
    format.pdf { 
      render pdf: 'foo', layout: 'pdf'
    }
  end
end

如果我只将hello world放入foo.pdf.erb就可以了!

但现在如果我想使用html视图来迭代我的模型(来自DB),如:

<p>hello world</p>    
<%= render @foo.chapters.order(number: :asc) %>

它运行正常,页面保持灰色,日志中没有错误...

如果我对此行发表评论,hello world会再次发挥作用。

所以issu是关于使用html partial:我们如何在pdf视图中使用普通的html视图?

1 个答案:

答案 0 :(得分:2)

我尝试在this commitWicked PDF issues project中重现您的问题,并成功完成了您在此处展示的内容,但是有一个小小的警告。

使用Rails模型渲染速记:

# assuming @books = Book.all or some collection of Book objects
<%= render @books %>

它将尝试使用请求的扩展来呈现该集合。

意思是,对于html请求,它将尝试在以下位置呈现模板:

app/views/books/_book.html.erb

对于PDF请求,它将尝试呈现

app/views/books/_book.pdf.erb

我通过将我的部分重命名为:

来解决这个问题
app/views/books/_book.erb

因此,无论HTML或PDF请求如何,都将使用它。

如果在您的情况下不起作用,您可以创建一个新的PDF部分,将HTML呈现为:

# app/views/books/_book.pdf.erb
<%= render partial: '/books/book',
      formats: [:html],
      locals: { book: book } %>