使用 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_name
和 singular_table_name
根据 table 动态更改。我不确定正确的语法是什么,或者它是否可能。任何帮助表示赞赏。
您可以使用双百分比 <%%
在 Erb 中转义 <%
(即 Erb 将读取 <%%
并写入 <%
到输出,并且不会' t 将内容视为 Ruby).
您需要执行以下操作:
<%% <%= a_plural_variable %>.each do | <%= a_singular_variable %> | %>
得到你想要的输出。该行将被评估为(假设变量的适当值):
<% chairs.each do | chair | %>
注意最后一个 %>
被解释为纯文本,不需要转义。
对于我的大部分项目,我对索引页使用相同的 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_name
和 singular_table_name
根据 table 动态更改。我不确定正确的语法是什么,或者它是否可能。任何帮助表示赞赏。
您可以使用双百分比 <%%
在 Erb 中转义 <%
(即 Erb 将读取 <%%
并写入 <%
到输出,并且不会' t 将内容视为 Ruby).
您需要执行以下操作:
<%% <%= a_plural_variable %>.each do | <%= a_singular_variable %> | %>
得到你想要的输出。该行将被评估为(假设变量的适当值):
<% chairs.each do | chair | %>
注意最后一个 %>
被解释为纯文本,不需要转义。