我的班次表应用
中有@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
但我使用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方法或其他函数解决问题?
答案 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>