我正在为我的办公室写一个“Punch Clock”应用程序..我正在为“TIme Card”视图的控制器工作,该视图应列出给定周的用户拳,并且总DAILY然后添加TOTAL用于周。我已经弄清楚如何使用切片/贴图获得所有打孔之间的时间差异,我的问题是,当我尝试在有序散列上执行此操作(按天分组)时,我得到未定义的方法`created_at'用于#,I知道我必须在某个地方遗漏一些语法,非常感谢你的帮助...
这是我的控制器......
请注意,如果我在@punches上调用@in_out_lenghts,这可以工作并给我一周的总数,但@punches_days给了我一个错误,因此我无法保持运行记录....
def mytimecard
@week = params[:week].to_s
if @week == "lastweek"
@punches = Punch.lastweek.where("user_id = ?", params[:user])
else
@punches = Punch.thisweek.where("user_id = ?", params[:user])
end
@punches_days = @punches.group_by { |t| t.created_at.beginning_of_day}
if @punches.count%2 == 0
@in_out_lengths = @punches_days.each_slice(2).map { |a|(a[1].created_at).round(15.minutes) - (a[0].created_at).round(15.minutes) }
@total = ((@in_out_lengths.inject(:+))/60/60)
else
@total = "Can Not Calculate, Odd Number of Punches"
end
respond_to do |format|
format.html # timecard.html.erb
format.json { render :json => @punches }
end
end
答案 0 :(得分:0)
group_by将返回日期和打孔的哈希值。
{ :day_1 => [ :punch1, :punch2], :day_2 => [ :punch3, :punch4, :punch5 ] }
执行each_slice和map会产生某种类型的数组,但可能不是你的意思。
你可能已经打算计算拳击次数并打电话给这样的事情
Punch.lastweek.where("user_id = ?", params[:user]).group('date(created_at)')
这会导致date => punches_count格式,至少用mysql。