如何从ERB动态创建的html中调用image_tag和number_to_currency

问题描述 投票:0回答:1

我正在尝试从ERB创建html文件,因为我想保存一份非常复杂的计算的发票副本。我的ERB模板正在使用许多不同的计算方法,并且大量使用了number_to_currencyimage_tag

以下是我的操作方法

def save_invoice
    erb_file = 'app/views/orders/invoice.html.erb'
    html_file = File.basename(erb_file, '.erb')
    erb_str = File.read(erb_file)
    renderer = ERB.new(erb_str)
    @order = Order.find(params[:id]).to_i
    result = renderer.result(binding)

      File.open(html_file, 'w') do |f|
        f.write(result)
      end
    end

我的invoice.html.erb

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Invoice</title>
 </head>
<body>
<header>
    <%= image_tag 'logo_new.png', width: '110',height: '100' %>
</header>
<h1>Invoice # <%= @order.id %></h1>
<p>Client : <%= @order.user.first_name %>, <%= @order.user.last_name %></p>
<p>Amount : <%= number_to_currency(@order.totals) %></p>

它正在制作html文件,但是如果我删除了所有image_tag(查看器帮助器)和number_to_currency函数。因此,如何在我的ERB中使用这些功能。我了解这是因为我正在创建ERB字符串,我真的比对除去所有这些功能的引用有效的理解不多。请建议我应该在方法中包括什么。我在这里放了非常紧凑的代码,实际上,成千上万行的代码非常混乱。

ruby-on-rails erb number-to-currency
1个回答
0
投票

我刚刚意识到我已经使用了绑定,所以为什么不将视图助手作为对象调用并在视图内部使用其功能。这样,它将自动将帮助程序发送到ERB文件。我在save_invoice方法的def save_invoice之后的顶部添加了以下行

    @views_helper = ActionView::Base.new 

现在在我的erb文件中,我已经通过添加该对象来代替我的image_tag,如下所示

@views_helper.image_tag

并且对于我的number_to_currency我也做了同样的事情

@views_helper.number_to_currency

并且它解决了我的问题,目前可以正常工作,我确定我要做成完整的对象,然后转发给它查看可能会产生大量请求的后果,但这对我来说很好。

作为说明,我创建对象,并且绑定将在我的ERB文件中显示所有局部变量,因此也可以访问该对象并完成工作。

© www.soinside.com 2019 - 2024. All rights reserved.