如何在视图中一起显示来自不同条目的具有相同名称的多个属性,例如“嵌套”属性?

时间:2018-10-11 17:38:01

标签: ruby-on-rails ruby view

在出租系统中,我有一个名为Boardgame的模型,具有以下属性:名称,副本和情况。情境是另一个模型,具有belongs_to。

下面是我的数据库示例:

Catan, copy 1, available
War, copy 1, rented
War, copy 2, available
War, copy 3, rented

我在索引视图中的代码是(没有HTML):

<% @boardgames.each do |boardgame| %>
  <%= boardgame.name %>
  <%= boardgame.copy %>
  <%= boardgame.situation.name %>
 <% end %>

它显示:

Catan
    - copy 1: available 
War
    - copy 1: rented 
War
    - copy 2: available 
 War
    - copy 3: rented

但是我想以这种方式显示:

Catan:
- copy1: available

War:
 - copy 1: rented
 - copy 2: available
 - copy 3: rented

现在,我看到更好的方法是将“复制”属性设置为另一个嵌套模型。但是该应用程序已经在生产中,包含所有租金记录,客户和付款等。

我该如何告诉Ruby on Rails名称是否相同,在这种情况下以嵌套形式显示属性?

1 个答案:

答案 0 :(得分:1)

您可以在@boardgames上使用Enumerable#group_by来使它们按照您想要的方式排列(最好不在视图本身中)。

<% @boardgames.group_by(&:name).each do |name, games| %>
  <h3><%= name %></h3>
  <ul>
    <% games.each do |game| %>
      <li>copy <%= game.copy %>: <%= game.rented %>
    <% end %>
  </ul>
<% end %>