我正在尝试使用集合渲染部分,并且已经能够执行此操作,但是,它正在循环遍历部分而不是我想要的。这是我的部分代码:
<table class="tabs">
<tr>
<% if tabs[:label] == selected %>
<%= tag("td", :id => "selected") %>
<% else %>
<%= tag("td") %>
<% end %>
<span class="before"></span>
<span class="middle">
<%= link_to tabs[:label], tabs[:url] %>
</span>
<span class="after"></span>
</td>
</tr>
</table>
<hr />
我想用它创建一系列标签(仅通过td迭代)。相反,它会遍历整个事物,并为集合的每个成员创建一个新表。是否可以在不从部分删除表格,tr和hr标签的情况下执行此操作?
TIA!
答案 0 :(得分:1)
我假设您正在使用Ruby on Rails,并且标签是您的集合的名称。如果是这样,那么你可以将它们移动到它们自己的部分中:
<td id="#{ tab[:label] == selected ? 'selected' : '' }" >
<span class="before"></span>
<span class="middle"><%= link_to tab[:label], tab[:url] %></span>
<span class="after"></span>
</td>
注意我是如何通过去掉if块来简化逻辑的,你的缩进应该告诉你一些不对劲。在这种情况下,逻辑没有反映html结构,这通常意味着有更好的方法来实现它。另请注意,制表符是单数,而不是复数;我们正在处理此部分中的一个选项卡,并为每个选项卡调用一次部分。
最后一件事:除非你有使用id
的某些功能原因,否则最好将选中的放在样式中而不是id
。
回到实施。重要的是我们将其命名为部分因为它决定了你如何称呼它。在这种情况下,我们将其称为_tab.html.erb(再次,单数)。
现在,这使您在原始文件中留下了这个:
<table class="tabs">
<tr>
</tr>
</table>
要使其调用新的部分,只需添加以下一行:
<table class="tabs">
<tr>
<%= render tabs %>
</tr>
</table>
请参阅? 标签在这里是复数。模板助手将调用_tab.html.erb for each tab in tabs
。
我测试了代码。你应该是金色的。
顺便说一句,回到我的肥皂盒上一会儿......你再也看不到用于标签的桌子了,至少不是在铁轨上。趋势是使用<ul>
内部<li>
和一些CSS样式。