Ruby on rails 切片/映射有序散列

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,这会起作用,并给出一周的总数

我正在为我的办公室写一份“打卡钟”申请。。我正在为“时间卡”视图的控制器工作,该视图应该列出一个用户在给定的一周内的打孔次数,以及每天的总次数,然后添加该周的总次数。我已经知道了如何使用slice/map获得所有穿孔之间的时间差,我的问题是,当我尝试在有序散列(按天分组)上执行此操作时,我得到了未定义的方法“created_at”,我知道我肯定在某个地方缺少一些语法,非常感谢您的帮助

这是我的控制器

请注意,如果我在@punchs上调用@in_out_lenghts,这会起作用,并给出一周的总数,但@punchs_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

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数组中创建了另一个数组。看一下文档: