如何使用 html view/partial 和 wicked_pdf gem 进行 pdf 查看?
how use html view/partial to pdf view with wicked_pdf gem?
def foo
respond_to do |format|
format.html { render layout: 'application' }
format.pdf {
render pdf: 'foo', layout: 'pdf'
}
end
end
如果我只在 foo.pdf.erb
中输入 hello world
就可以了!
但现在如果我想使用 html 视图来迭代我的模型(来自数据库),例如:
<p>hello world</p>
<%= render @foo.chapters.order(number: :asc) %>
它确实有效,页面保持灰色,日志中没有错误...
如果我评论这一行,hello world
再次起作用。
所以问题是关于使用 html 部分:我们如何在 pdf 视图中使用正常的 html 视图?
我试图在 this commit of the Wicked PDF issues project 中重现您的问题并成功完成了您在此处显示的内容,但是有一个小警告。
使用Rails模型渲染shorthand:
# 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 } %>
def foo
respond_to do |format|
format.html { render layout: 'application' }
format.pdf {
render pdf: 'foo', layout: 'pdf'
}
end
end
如果我只在 foo.pdf.erb
中输入 hello world
就可以了!
但现在如果我想使用 html 视图来迭代我的模型(来自数据库),例如:
<p>hello world</p>
<%= render @foo.chapters.order(number: :asc) %>
它确实有效,页面保持灰色,日志中没有错误...
如果我评论这一行,hello world
再次起作用。
所以问题是关于使用 html 部分:我们如何在 pdf 视图中使用正常的 html 视图?
我试图在 this commit of the Wicked PDF issues project 中重现您的问题并成功完成了您在此处显示的内容,但是有一个小警告。
使用Rails模型渲染shorthand:
# 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 } %>