代码之家  ›  专栏  ›  技术社区  ›  Kamal Panhwar

如何在ERB动态创建的html中调用图像标签和数字货币

  •  0
  • Kamal Panhwar  · 技术社区  · 6 年前

    我试图从ERB创建一个html文件,因为我想保存一个非常复杂计算的发票副本。我的ERB模板使用了许多不同的计算,并且使用了大量 number_to_currency image_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
    

    我的发票.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>
    
    

    0 回复  |  直到 6 年前
        1
  •  1
  •   Kamal Panhwar    6 年前

    我刚刚意识到我使用了绑定,所以为什么不将视图助手作为对象调用,并在我的视图中使用它的函数。这样它会自动将助手发送到 ERB 文件。我在后面加了下面一行 def save_invoice

        @views_helper = ActionView::Base.new 
    

    现在在我的erb文件中我已经替换了 image_tag 像下面这样添加这个对象

    <%= @views_helper.image_tag 'logo_new.png', width: '110',height: '100' %>
    

    为了我的数字货币我做了同样的事

    
    <p>Amount : <%= @views_helper.number_to_currency(@order.totals) %></p>
    

    它解决了我的问题,目前运行良好,我确信我正在制作完整的对象,然后将其转发到视图可能会产生大量请求的后果,但这对我来说运行良好。

    至于解释,我创建对象和绑定将显示我的ERB文件中的所有局部变量,所以这个对象也将是可访问的,并做的工作。

    推荐文章