Ruby on rails 如何进行双重迭代

Ruby on rails 如何进行双重迭代,ruby-on-rails,ruby,Ruby On Rails,Ruby,我们有课程表。在@appointment\u monday中,我们有不同的约会,属于特定的类别: 当然可以,@预约。每个都不起作用。它将产生如下结果: 因为某个类别的某些约会可能是空的。我们试图通过@类别来判断每个约会,但结果如下: <% @appointments.each do |appointment| %> <% @categories.each do |category| %> <% if appoint

我们有课程表。在
@appointment\u monday
中,我们有不同的
约会
,属于特定的
类别

当然可以,
@预约。每个
都不起作用。它将产生如下结果:

因为某个类别的某些约会可能是空的。我们试图通过
@类别
来判断每个
约会
,但结果如下:

    <% @appointments.each do |appointment| %>
        <% @categories.each do |category| %>
            <% if appointment.category == category %>
              <%= appointment %>  
            <% else %>
                placeholder
            <% end %>    
       <% end %>
    <% end %>


占位符

我认为问题在于
@类别。每次都是循环的。我们应该如何处理这一问题?

与其在约会和类别上循环,不如只在类别上迭代一次(因为您想为每个类别输出一些内容,不管它是否有约会),然后检查是否存在该类别的约会:

<% @categories.each do |category| %>
  <% category_appointments = @appointments.select {|a| a.category == category } %>
  <% if category_appointments.empty? %>
    <%= placeholder %>
  <% else %>
    <%= category_appointments %>
  <% end %>
<% end %>


select
是一种包含在
Array
中的方法

你能告诉我们想要的产量吗?是第一个图吗?@Daiku是的,第一个。然后我想你只需要切换你的内部和外部迭代器。但是Carol的答案可能更有效,因为测试类别是否匹配的是C语言,而不是ruby语言。它确实有效。但我仍然觉得这个方法很反直觉。是否可以使用
@约会
?我觉得这就是一张桌子应该被填满的方式。哦,我想知道我是否误解了这个问题。您正在填写表格的单元格,该行用于
@appointment
中的所有
约会
对象集,列用于每个
类别
,对吗?我认为这更像是“让我们访问该行中的每个单元格,看看是否有任何内容属于此处”,而不是“让我们将所有约会放在它们所属的单元格中”。这有用吗?我真的不知道你为什么要重复@Appoints,你能详细说明一下,如果这听起来像是我的误解吗?