我正在制作一个时间表,但我有问题。 我希望它看起来像这样:Rails哈希和数组
projects |Monday Tuesday Wednesday Thursday Friday Saturday Sunday
development| 3:50 4:00 5:00 3:00 0:00 0:00 0:00
Testing | 0:00 0:00 0:00 2:00 4:00 0:00 0:00
Lanch | 0:00 0:00 0:00 0:00 1:00 6:00 0:00
每一个项目的has_many日志以小时为一个字段。
我做了这个查询:
@log_week_project = current_user.logs.where(:log_date => (Time.now.beginning_of_week + 1.second)..(Time.now.end_of_week - 1.second)).group("project_id").group("date(log_date)").sum(:hours)
而得到这样的:
<OrderedHash {[2, "2011-05-24"]=>31800.0, [1, "2011-05-24"]=>10200.0, [1, "2011-05-23"]=>25200.0, [1, "2011-05-26"]=>19800.0}>
哈希的关键是与PROJECT_ID @数组[0]和LOG_DATE @ [1]。值是小时。
我这样做,我认为:
<% for project in @projects do %>
<%= project.name %>
<% @log_week_project.map do |key,hours|%>
<% if key[0] == project.id %>
<%= time_diff(hours)%>
<% end %>
<% end %>
<% end %>
这使我对每个日期的项目小时,但如果没有小时日期没有输出和表得到错误的。
如果周三没有小时,星期四小时最后会在星期三列。
有关如何做到这一点的任何提示?也许有更好的办法?
SOLUTION:
感谢答复和意见。解决的办法是:
<% for project in @projects do %>
<%= project.name %>
<% @dates.each do |date| %>
<% hours = @log_week_project.detect { |key| key[0][0].to_i == project.id && key[0][1].to_time.strftime('%a') == date.to_time.strftime('%a')}%>
<%= hours ? time_diff(hours[1]) : "0:00"%>
<% end %>
<%端%>
凡@dates处于TIMERANGE的日期的阵列。现在重构...; )
如果current_user.logs.first.log_date == Time.now.beginning_of_week怎么办?这将在您的查询中错过。 – Yule 2011-05-25 12:48:42