Как вызвать image_tag и number_to_currency в динамически созданном html из ERB - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь создать файл html из ERB, поскольку я хочу сохранить копию счета-фактуры очень сложного расчета. В моем шаблоне 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>

Создает html файл, но если я удаляю все функции image_tag (viewer helper) и number_to_currency. Итак, как я могу использовать эти функции в моем ERB. Я понимаю, что потому, что я создаю строку ERB, я действительно не понимаю этот код больше, чем ссылка, которая работает, когда я удаляю все эти функции. Пожалуйста, предложите мне, что я должен включить в метод. Я поместил здесь очень сжатые коды, на самом деле коды - это много путаницы с тысячами строк.

1 Ответ

1 голос
/ 21 февраля 2020

Я только что понял, что использовал привязки, так почему бы не вызвать view helper как объект и использовать его функцию внутри моего представления. таким образом он автоматически отправит помощника в файл ERB. Я добавил следующую строку сверху после def save_invoice в моем методе save_invoice

    @views_helper = ActionView::Base.new 

Теперь в моем файле erb я заменил image_tag на добавление этого объекта следующим образом

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

и для моего number_to_currency я сделал то же самое


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

И это решило мою проблему, в настоящее время работает нормально, я уверен, что я делаю полный объект, а затем пересылка его для просмотра может иметь последствия тяжелого запроса, но это работает нормально для меня.

Что касается объяснения, я создаю объект, и привязка покажет все локальные переменные в моем файле ERB, так что этот объект также будет доступен и сделает работу.

...