使用 ERB 生成器生成动态 ERB

Generating dynamic ERB using ERB generator

对于我的大部分项目,我对索引页使用相同的 ole 视图。 html 通常是这样的。

期望的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 标签,它将 return 一个 ERB 字符串而不是 运行 里面的代码。我相信我已经隔离了这个问题并用 **** 标记了行。我需要这些行按原样显示,但我需要 plural_table_namesingular_table_name 根据 table 动态更改。我不确定正确的语法是什么,或者它是否可能。任何帮助表示赞赏。

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

您需要执行以下操作:

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

得到你想要的输出。该行将被评估为(假设变量的适当值):

<% chairs.each do | chair | %>

注意最后一个 %> 被解释为纯文本,不需要转义。