如何在ruby文件中的html中嵌入ruby?

时间:2016-07-30 00:24:09

标签: html ruby

我有一个用于发送电子邮件的ruby文件。我正在使用教程中的代码如下:

 require 'net/smtp'
 test_arr = ["test", "test1"]

 message = <<MESSAGE_END
 From: Private Person <me@fromdomain.com>
 To: A Test User <test@todomain.com>
 MIME-Version: 1.0
 Content-type: text/html
 Subject: SMTP e-mail test

 This is an e-mail message to be sent in HTML format

 <b>This is HTML message.</b>
 <h1>This is headline.</h1>

 //Here I want to iterate through the Array test_arr and create a h1 element for each element in array

 <h1> test </h1>
 <h1> test1 </h1>
 MESSAGE_END

 Net::SMTP.start('localhost') do |smtp|
 smtp.send_message message, 'me@fromdomain.com', 
                         'test@todomain.com'
 end

我已经尝试&lt;%注入ruby代码来迭代数组但似乎不起作用。我怎么能遍历那条HTML消息中的test_arr数组?

3 个答案:

答案 0 :(得分:0)

将文件另存为.html.erb,以便在html消息中使用带<%= ruby_code %>的嵌入式ruby代码。

答案 1 :(得分:0)

您需要使用erb之类的内容将其创建为模板。

这样的事情应该有效。

require 'net/smtp'
require 'erb' 

 test_arr = ["test", "test1"]

 message = <<MESSAGE_END
 From: Private Person <me@fromdomain.com>
 To: A Test User <test@todomain.com>
 MIME-Version: 1.0
 Content-type: text/html
 Subject: SMTP e-mail test

 This is an e-mail message to be sent in HTML format

 <b>This is HTML message.</b>
 <h1>This is headline.</h1>

 <% test_arr.each() do |ta| %>
    <h1><%=ta%></h1>  
 <% end %>

 MESSAGE_END
 # create a renderer to parse our template 
 renderer = ERB.new(message)
 Net::SMTP.start('localhost') do |smtp|
 smtp.send_message renderer.result(), 'me@fromdomain.com', 
                         'test@todomain.com'

 end

注意你需要在脚本中require 'erb'创建模板,在这种情况下是一个简单的块来迭代数组。然后,您需要使用Erb.new(template_name)从模板创建渲染器。获得渲染器后,需要在其上调用#result以获取渲染输出。您可以查看erb文档以获取更多信息(http://ruby-doc.org/stdlib-2.3.1/libdoc/erb/rdoc/ERB.html

答案 2 :(得分:0)

排成一行:

C:\nginx-1.8.1>ls -1
conf
contrib
docs
html
logs
nginx.exe
temp

在相关位置。

或者,您可以使用我的dom gem

test_arr.map{|e| "<h1>#{e}</h1>"}.join($/)