2016-02-12 47 views
0

对于我的大部分项目,我使用相同的ole视图作为我的索引页面。 html通常是沿着这条线。使用ERB生成器生成动态ERB

所需的HTML结果:

<h1>Chairs</h1> 

<table class="table table-striped"> 
    <thead> 
    <tr> 
     <th>Color</th> 
     <th>Size</th> 
     <th>Fabric</th> 
     <th>Description</th> 
    </tr> 
    </thead> 

    <tbody> 
    <% @chairs.each do |chair| %> 
     <tr> 
     <td><%= chair.color %></td> 
     <td><%= chair.size %></td> 
     <td><%= chair.fabric %></td> 
     <td><%= chair.description %></td> 
     </tr> 
    <% end %> 
    </tbody> 
</table>` 

相当直截了当。我遇到的问题是我创建的生成器使用ERB标签来创建html代码。我需要使用ERB标签来创建ERB标签。

<h1><%= plural_table_name %></h1> 

<table class="table table-striped"> 
    <thead> 
    <tr> 
    <%- if !options[:fields].empty? -%> 
     <%- options[:fields].each do |field| -%> 
     <th><%= field.capitalize %></th> 
     <%- end -%> 
    <%- end -%> 
    </tr> 
    </thead> 

    <tbody> 
**** <%- @plural_table_name.each do | singular_table_name | -%> 
     <%- if !options[:fields].empty? -%> 
     <%- options[:fields].each do |field| -%> 
      <tr> 
****  <td><%= singular_table_name.field %></td> 
      </tr> 
     <%- end -%> 
     <%- end -%> 
**** <%- end -%> 
    </tbody> 
</table> 

这是我的,但它显然是错误的。 options[:fields]是一个正常工作的数组,因为<thead>块显示我需要它。我的问题是创建一个ERB标签,它将返回一个ERB字符串,而不是运行里面的代码。我相信我隔离了这个问题,并注意到****。我需要这些线显示,但我需要plural_table_namesingular_table_name根据表动态更改。我不确定什么是正确的语法,或者甚至可能。任何帮助表示赞赏。

+0

你想分析两次吗?例如解析erb并返回erb然后再解析生成html? – engineersmnky

+0

@engineersmnky基本上,是的。我正在运行我的生成器来为我创建我的html文件。 –

回答

1

您可以使用双重百分数<%%在Erb中转义<%(即Erb将读取<%%并将<%写入输出,并且不会将内容视为Ruby)。

你需要做的事情一样:

<%% <%= a_plural_variable %>.each do | <%= a_singular_variable %> | %> 

得到你想要的输出。这条线路将进行评估,以(变量假设适当的值):

<% chairs.each do | chair | %> 

注意最后%>被解释为纯文本,不需要逃跑。