如何使用 wicked_pdf gem 来使用 html 视图/部分 pdf 视图?

Mat*_*rix 3 ruby pdf wicked-pdf

def foo    
  respond_to do |format|
    format.html { render layout: 'application' }
    format.pdf { 
      render pdf: 'foo', layout: 'pdf'
    }
  end
end
Run Code Online (Sandbox Code Playgroud)

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

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

<p>hello world</p>    
<%= render @foo.chapters.order(number: :asc) %>
Run Code Online (Sandbox Code Playgroud)

它不起作用,页面保持灰色,日志中没有错误......

如果我评论这一行,hello world又可以工作了。

所以问题是关于使用html部分:我们如何在pdf视图中使用普通的html视图?

Uni*_*key 5

我尝试在Wicked PDF issues 项目这次提交中重现您的问题,并成功完成您在此处显示的内容,但是有一个小警告。

使用 Rails 模型渲染简写:

# assuming @books = Book.all or some collection of Book objects
<%= render @books %>
Run Code Online (Sandbox Code Playgroud)

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

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

app/views/books/_book.html.erb
Run Code Online (Sandbox Code Playgroud)

对于 PDF 请求,它将尝试渲染

app/views/books/_book.pdf.erb
Run Code Online (Sandbox Code Playgroud)

我通过将部分重命名为来解决这个问题:

app/views/books/_book.erb
Run Code Online (Sandbox Code Playgroud)

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

如果这在您的情况下不起作用,您可以创建一个新的 PDF 部分,它会呈现 HTML 部分,如下所示:

# app/views/books/_book.pdf.erb
<%= render partial: '/books/book',
      formats: [:html],
      locals: { book: book } %>
Run Code Online (Sandbox Code Playgroud)