Ruby on rails 切片/映射有序散列
我正在为我的办公室写一份“打卡钟”申请。。我正在为“时间卡”视图的控制器工作,该视图应该列出一个用户在给定的一周内的打孔次数,以及每天的总次数,然后添加该周的总次数。我已经知道了如何使用slice/map获得所有穿孔之间的时间差,我的问题是,当我尝试在有序散列(按天分组)上执行此操作时,我得到了未定义的方法“created_at”,我知道我肯定在某个地方缺少一些语法,非常感谢您的帮助 这是我的控制器 请注意,如果我在@punchs上调用@in_out_lenghts,这会起作用,并给出一周的总数,但@punchs_days会给我一个错误,因此我无法保持连续计数Ruby on rails 切片/映射有序散列,ruby-on-rails,arrays,ruby-on-rails-3,hash,Ruby On Rails,Arrays,Ruby On Rails 3,Hash,我正在为我的办公室写一份“打卡钟”申请。。我正在为“时间卡”视图的控制器工作,该视图应该列出一个用户在给定的一周内的打孔次数,以及每天的总次数,然后添加该周的总次数。我已经知道了如何使用slice/map获得所有穿孔之间的时间差,我的问题是,当我尝试在有序散列(按天分组)上执行此操作时,我得到了未定义的方法“created_at”,我知道我肯定在某个地方缺少一些语法,非常感谢您的帮助 这是我的控制器 请注意,如果我在@punchs上调用@in_out_lenghts,这会起作用,并给出一周的总数
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
group_by将返回天数和打孔数的散列值
{ :day_1 => [ :punch1, :punch2], :day_2 => [ :punch3, :punch4, :punch5 ] }
执行each_切片和映射将生成某种数组,但可能不是您的意思
你可能想数一数,然后打这样的电话
Punch.lastweek.where("user_id = ?", params[:user]).group('date(created_at)')
这将导致date=>Punchs\u count格式,至少在mysql中是这样。您的错误中没有行号吗?我认为group by在你的Punchs数组中创建了另一个数组。看一下文档: