我可以通过多表在ruby轨道上使用group_by方法吗?

时间:2017-04-28 02:13:44

标签: html ruby-on-rails ruby

我的班次表应用

中有@schedules个对象

我将它分组使用我的控制器中的group_by方法

@schedules = Schedule.all
@days_off_list = @schedules.group_by {|t| t.staff}

型号:

class Staff
 has_many :schedules
end

class Schedule
 belongs_to :staff
end

我希望它显示为excel

但我使用html标记<table>,并将其布局为

  

张学友

     

2017-4-6休息日

     

2017-4-7休息日

     

阿伦

     

2017-4-4休息日

     

2017-4-6休息日

在我看来:

<table>
<% @days_off_list.each do |staff, schedules| %> 
    <tr>
        <th><%= staff.name %></th>
    </tr>
    <% schedules.each do |schedule| %>
        <tr>
            <td><%= schedule.days_off.to_date %></td>
            <td> break</td>
        </tr>
    <% end %>
<% end %>
</table>

我知道如何按if else按日期对@schedules进行分组,并按属性使用group_by方法分组,但我不知道如何一起使用两种方式。

我是否有任何解决方案可以通过group_by方法或其他函数解决问题?

1 个答案:

答案 0 :(得分:0)

我尝试其他方法来解决问题,它可以工作。 解决方案使用三个each循环和一个if elsif来选择真实日期,就像我在上面写的那样。

控制器:

@staffs = Staff.all
@range = Date.today.beginning_of_month..Date.today.end_of_month
@schedules = Schedule.all

助手:

def search_days_off(day)
     Schedule.where(days_off: day.midnight..day.end_of_day).map {|t| t.staff.number}.sort.last
end

视图:

<tbody>
        <% @range.each do |days| %>
        <tr>
            <td><%= days %></td>
            <% @staffs.each do |staff| %>
                <% @schedules.each do |schedule| %>
                    <% if days == schedule.days_off.to_date %>
                        <% if staff.number ==  schedule.staff.number %>
                        <td>day off</td>
                        <% break %>
                        <% elsif schedule.staff.number.equal?(search_days_off(schedule.days_off)) %>
                        <td> </td>
                        <% end %>
                    <% end %>
                <% end %>
            <% end %>
        </tr>
        <% end %>
    </tbody>