切片/地图有序哈希

时间:2011-11-16 17:28:35

标签: ruby-on-rails arrays ruby-on-rails-3 hash

我正在为我的办公室写一个“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

1 个答案:

答案 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。