如何解决实例变量没有被传递到视图中
所以也许这是一个不好的问题,但我正在尝试创建一个 pdf 生成器,它通过 html 视图将数据库中的名称动态放入 pdf 中。
这是我的控制器的下载功能。
class PdfGeneratorController < ApplicationController
def download
@actual_locale = I18n.locale
I18n.locale = :en
@user = User.find(params[:userid])
@firstname = @user.first_name
@lastname = @user.last_name
html = PdfGeneratorController.new.render_to_string(
{
template: "/pdf_generator/download",layout: "user_courses/certificate_layout",}
)
pdf = Grover.new(html,wait_until: 'load').to_pdf
send_data pdf,type: "application/pdf",disposition: 'attachment',filename: 'Certificate.pdf'
I18n.locale = @actual_locale
end
end
如果我在声明@user、@firstname 和@lastname 之后放置一个byebug,它们都会返回正确的数据。在我名为 download.html.erb 的视图中,我像这样使用 @firstname 和 @lastname。
<h2 class="certificate--title"> Demo Certification</h2>
<h4>is proudly presented to</h4>
<h2 class="certificate--acquirer-name"><%= @firstname %> <%= @lastname%> </h2>
但是,当生成 pdf 时,其中没有名称。最后,我用 byebug 进行了测试,@firstname 和 @lastname 在视图中返回为 nil。任何想法我可能做错了什么?
解决方法
问题在于您正在创建一个新的控制器实例,而您应该只使用当前实例。
html = PdfGeneratorController.new.render_to_string(
应该是:
html = render_to_string(
控制器实例的创建通常由 Rails 框架完成,不应由您自己完成。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。