【问题标题】:Using a collection in a partial render在部分渲染中使用集合
【发布时间】:2011-12-19 09:50:04
【问题描述】:

我正在尝试用一个集合来渲染一个局部,并且已经能够做到,但是,它比我想要的循环遍历局部。这是我的部分代码:

        <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 迭代)。相反,它会遍历整个事情,并为集合的每个成员创建一个新表。是否可以在不从部分中删除 table、tr 和 hr 标记的情况下执行此操作?

TIA!

【问题讨论】:

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


    【解决方案1】:

    我将假设您正在使用 Ruby on Rails,并且 tabs 是您的集合的名称。如果是这样,那么您可以将它们移动到自己的部分中:

    <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 结构,这通常意味着有更好的方法来做到这一点。还要注意 tab 是单数,而不是复数;我们正在处理这个部分中的一个选项卡,并且每个选项卡都会调用一次部分。

    最后一件事:除非您出于某种功能原因使用 id,否则最好将 selected 放在样式中,而不是 id

    回到实现。重要的是我们命名该部分,因为它决定了您如何称呼它。在这种情况下,我们将其命名为 _tab.html.erb(同样,单数)。

    现在,你在原始文件中留下了这个:

    <table class="tabs">
      <tr>
      </tr>
    </table>
    

    要让它调用新的部分,只需添加这一行:

    <table class="tabs">
      <tr>
        <%= render tabs %>
      </tr>
    </table>
    

    看到了吗? tabs 在这里是复数。模板助手将调用 _tab.html.erb for each tab in tabs

    我测试了代码。你应该对此很满意。

    顺便说一句,回到我的肥皂盒上……您再也看不到用于选项卡的表格了,至少在 rails 中没有。趋势是使用带有&lt;li&gt; 内部的&lt;ul&gt; 和一些CSS 样式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 2015-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多