在哈希中迭代我的数组

时间:2014-05-04 20:56:12

标签: ruby-on-rails ruby arrays loops hash

首先,我希望我的理解是正确的,事实上我确实在我的哈希中有一个数组。

我已经到目前为止但似乎无法遍历每个哈希及其数组。我想做的是按照日期(仅限年份)对每个锦标赛进行分组,并在下面列出所有锦标赛。

到目前为止,我的逻辑是

控制器

@tournaments = Tournament.all
@tournament_year = @tournaments.group_by {|y| y.tourn_date.year}

查看

<ul class="resp-tabs-list">
  <% @tournament_year.each do |y, t| %>
    <li><%= y %></li>
  <% end %>
</ul>

的哈希

{2014=>[#<Tournament id: 3, name: "WTS ", tourn_date: "2014-04-26", tourn_location: "Cardiff", created_at: "2014-04-26 14:57:21", updated_at: "2014-04-26 14:57:21">, #<Tournament id: 4, name: "CTS Nottingham", tourn_date: "2014-05-26", tourn_location: "Nottingham", created_at: "2014-04-26 14:57:39", updated_at: "2014-04-26 14:57:48">]}

我想要的输出会低于

<h3>2014</h3>
<ul>
  <li>Tournament Name 1</li>
  <li>Tournament Name 2</li>
</ul>

<h3>2013</h3>
<ul>
  <li>Tournament Name 1</li>
  <li>Tournament Name 2</li>
</ul>

任何帮助表示赞赏

由于

3 个答案:

答案 0 :(得分:2)

更改您的观点如下:

<ul class="resp-tabs-list">
  <% @tournament_year.each do |y, t| %>
    <h3><%= y %></h3>
    <ul>
    <% t.each_with_index do |tournament, i| %>
      <li><%= tournament.name %> <%= i %></li>
    <% end %>
    </ul>
  <% end %>
</ul>

答案 1 :(得分:1)

我建议

<% @tournament_year.each do |y, t| %>
  <h3> <%= y %></h3>
  <ul class="resp-tabs-list">
    <% t.each do |tournament| %>
      <li><%= "#{tournament.to_s}" %></li>
    <% end %>
  </ul>
<% end %>

,其中

#app/models/tournament.rb

def to_s
  "#{name} #{id}"
end

答案 2 :(得分:0)

我刚刚提出这个解决方案作为一个例子,似乎工作,任何人都可以看到为什么这是不正确的?

<ul class="resp-tabs-list">
  <%= @tournament_year.each do |y, t| %>
    <li><%= y %></li>
      <%= @tournament_year[y].each do |x| %>
        <li><%= x.name %></li>
      <% end %>
  <% end %>
</ul>