在部分渲染中使用集合

时间:2011-12-18 22:11:30

标签: ruby-on-rails ruby-on-rails-3 collections partial-views

我正在尝试使用集合渲染部分,并且已经能够执行此操作,但是,它正在循环遍历部分而不是我想要的。这是我的部分代码:

        <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!

1 个答案:

答案 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样式。