首页 > 解决方案 > 迭代rails中的引导选项卡内容

问题描述

我正在尝试在我的 rails 应用程序中使用引导程序创建选项卡内容。我当前的实现看起来像这样

  <div class="tab-content" id="v-pills-tabContent">
    <div class="tab-pane fade show active" id="v-pills-England" role="tabpanel" aria-labelledby="v-pills-England-tab">
      <% @teams.each do | team | %>
        <% if team.team_country == "England" %>
          <div class="form-check">
            <input class="form-check-input" type="radio" name="team" id="<%= team.id %>" value="<%= team.id %>">
            <label class="form-check-label" for="<%= team.id %>">
              <%= team.short_name %>
            </label>
          </div>
        <% end %>
      <% end %>
    </div>
    <div class="tab-pane fade" id="v-pills-France" role="tabpanel" aria-labelledby="v-pills-France-tab">
      <% @teams.each do | team | %>
        <% if team.team_country == "France"%>
          <div class="form-check">
            <input class="form-check-input" type="radio" name="team" id="<%= team.id %>" value="<%= team.id %>">
            <label class="form-check-label" for="<%= team.id %>">
              <%= team.short_name %>
            </label>
          </div>
        <% end %>
      <% end %>
    </div>
  </div>

这很有效,我在正确的国家得到了预期的“团队”。问题是,代码是如此重复,我正在寻找一种让它更“干”的方法。当我尝试迭代“标签内容”类时,我没有让团队在正确的国家下。这是我试过的

    <div class="tab-content" id="v-pills-tabContent">
     <% @teams.each do | team | %>
      <div class="tab-pane fade show active" id="v-pills-<%= team.team_country %>" role="tabpanel" aria-labelledby="v-pills-<%= team.team_country %>-tab">
        <%= team.short_name %>
      </div>
    <% end %>
   </div>

什么是迭代选项卡内容并动态插入值的最佳方法,同时在正确的国家/地区拥有团队。

标签: htmlruby-on-railsrubytwitter-bootstrap

解决方案


一种选择是将group_by您的数组分组到国家/地区,然后遍历这些组:

<div class="tab-content" id="v-pills-tabContent">

  <% @teams.group_by(&:team_country).each do |country, country_teams| %>
    <div class="tab-pane fade show active" id="v-pills-<%= country %>" role="tabpanel" aria-labelledby="v-pills-<%= country %>-tab">

      <% country_teams.each do | team | %>
        <div class="form-check">
          <input class="form-check-input" type="radio" name="team" id="<%= team.id %>" value="<%= team.id %>">
          <label class="form-check-label" for="<%= team.id %>">
            <%= team.short_name %>
          </label>
        </div>
      <% end %>

    </div>
  <% end %>
</div>

推荐阅读