在Rails中分组4

时间:2015-03-05 14:53:52

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord

我有一个日历,我想将这些数据分组。所以我在控制器中有这个

  @entry_by_date = Entry.where("emp_mail_addr = ? and emp_first_name = ? and  emp_last_name = ? and emp_dept = ?", current_user.email, current_user.emp_first_name, current_user.emp_last_name, current_user.emp_dept).group_by {|i| i.leave_start.to_date}
  @date = params[:date] ? Date.parse(params[:date]) : Date.today

问题是@entry_by_date我有.group_by {| i | i.leave_start.to_date} 我怎么能让它有两个日期组,例如....

@entry_by_date ........ group_by {| i | i.leave_start.to_date} {| i | i.leave_end.to_date}

所以它现在将由leave_start和leave_end分组,所以现在我的日历上会显示离开开始和离开结束日期..

我试过这样做

 @entry_by_date = Entry.where("emp_mail_addr = ? and emp_first_name = ? and  emp_last_name = ? and emp_dept = ?", current_user.email, current_user.emp_first_name, current_user.emp_last_name, current_user.emp_dept).group_by {|i| i.leave_start.to_date}
 @entry_by_date = Entry.where("emp_mail_addr = ? and emp_first_name = ? and  emp_last_name = ? and emp_dept = ?", current_user.email, current_user.emp_first_name, current_user.emp_last_name, current_user.emp_dept).group_by {|i| i.leave_end.to_date}

但是只留下开始出现或者如果我切换它们就会出现结束。我想两者都出现,建议非常感谢!!!!

谢谢!

1 个答案:

答案 0 :(得分:2)

  1. 请注意group_bygroup API之间存在重大差异 - 前者适用于列表(之后从数据库中提取) ,而后者用于数据库查询本身(添加GROUP BY子句)

  2. 我不确定您要实现的目标,但如果您希望将您的论坛的密钥设为日期数组,则可以在一个group_by中完成块:

    @entry_by_date = entries.group_by { |i| [i.leave_start.to_date, i.leave_end.to_date] }
    

    如果您希望将每个条目分组两次(一次包含其开始日期,一次包含其结束日期),则需要创建2个分组的地图,并且 join 他们:

    entry_by_start_date = entries.group_by {|i| i.leave_start.to_date}
    entry_by_end_date = entries.group_by {|i| i.leave_end.to_date}
    @entry_by_date = entry_by_start_date.merge(entry_by_end_date) {|key, oldval, newval| newval + oldval}