
[英]How to call an external website image with image_tag in a .html.erb?
[英]How to call image_tag and number_to_currency in dynamcially created html from ERB
我正在尝试从 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
我的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 字符串,我真的不理解这段代码,而不是在我删除所有这些函数时工作的参考。 请建议我应该在方法中包含什么。 我在这里放了非常简洁的代码,实际上代码很乱,有数千行。
我刚刚意识到我使用了绑定,那么为什么不将视图助手作为对象调用并在我的视图中使用它的函数。 这样它会自动将助手发送到ERB
文件。 我在 save_invoice 方法中的def 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 文件中的所有局部变量,因此这个对象也可以访问并完成工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.