在图片上,您可以看到绿线是分组(ed)_by和sort(ed),如下面的代码所示:
的控制器:
class WelcomeController < ApplicationController
def index
if(current_user)
@user_schedules = current_user.schedules
@user_schedules_date = @user_schedules.group_by { |tables| tables.date }
end
end
end
查看:
<% @user_schedules_date.sort.each do |date, schedules| %>
<tr class="thead success">
<th colspan="4" scope="col"><p><%= date %></p></th>
</tr>
<% for schedule in schedules %>
<tr>
<th scope="row"><p><%= schedule.titel %></p></th>
<td><p><%= schedule.time %></p></td>
<td><p><%= schedule.location %></p></td>
</tr>
<% end %>
<% end %>
如何排序&#34;时间&#34;另外?
id;user_id;titel;location;time;date
1;"12";"Test";"Testort";"12:45:00";"01.01.2014"
2;"12";"Test2";"Testort2";"12:30:00";"01.01.2014"
3;"12";"Test3";"Testort3";"13:00:00";"02.01.2014"
id;user_id;titel;location;time;date;date_time
1;"12";"Test";"Testort";"12:45:00";"01.01.2014";"2014-01-01 00:00:00"
2;"12";"Test2";"Testort2";"12:30:00";"01.01.2014";"2014-01-01 01:00:00"
3;"12";"Test3";"Testort3";"13:00:00";"02.01.2014";"2014-02-01 00:00:00"
4;"21";"Test4";"Testort4";"Testzeit4";"Testdatum";"2014-03-01 00:00:00"
所以这很好用。
html表现在看起来像这样:
现在我必须了解如何分隔日期和时间,以及如何在灰线处对时间进行排序。
我不知道如何使用strftime
- 方法。你说我应该在模型中实现它?
我在计划模型中试过这个:
def get_date
return date_time.strftime("%d.%m.%Y");
end
我应该添加 view-code :
<% @user_schedules_date.sort.each do |date_time, schedules| %>
<tr class="thead success">
<th colspan="4" scope="col"><p><%= date_time %></p></th>
</tr>
<% for schedule in schedules %>
<tr>
<th scope="row"><p><%= schedule.titel %></p></th>
<td><p><%= schedule.time %></p></td>
<td><p><%= schedule.location %></p></td>
</tr>
<% end %>
<% end %>
如果你能再次帮助我,那就好了 感谢。
答案 0 :(得分:2)
您的time
字段目前是一个字符串。这意味着,只需在sort
字段中调用time
,就不会执行您想要的操作。相反,它将按字母数字排序排序。例如1:00 PM
将在10:00 AM
之前到来,因为:
小于0
。
要解决此问题,您可以执行以下两项操作之一:
解析需要进行排序的时间,例如:
@user_schedules_date =
@user_schedules.group_by(&:date)
.each do |(_, grp)|
grp.sort_by! { |row| Time.parse(row.time) }
end
或(这是我推荐的)。将您的date
和time
合并为一个字段(让我们称之为date_time
),类型为datetime
。通过这种方式,Rails知道在将数据提供给您之前将其从数据库中获取的值包装在DateTime
的实例中,并且知道将该值作为DATETIME
字段存储在数据库中。
这很棒,因为它简化了您的分组和排序:
@user_schedules_date =
@user_schedules.order(:date_time)
.group_by { |sched| sched.date_time.beginning_of_day }
另外,排序(排序)是由数据库完成的,而不是在我们将它加载到Ruby的内存中之后,在大多数情况下,这是优选的。
编辑(回答问题中的修改)
DateTime
实例返回日期字符串,请执行以下操作date.strftime("%d.%m.%Y")
。schedule.date_time.strftime('%T')
。