Ruby on rails 将结果与0相加
我有一个rails 4(ruby 2)应用程序,可以跟踪不同公司员工的时间。我需要每个公司每个日期的分钟数。我的问题是,如果那天没有该公司的时间条目,我不确定用0填充日期/公司对的最佳方法 表格Ruby on rails 将结果与0相加,ruby-on-rails,algorithm,rails-postgresql,Ruby On Rails,Algorithm,Rails Postgresql,我有一个rails 4(ruby 2)应用程序,可以跟踪不同公司员工的时间。我需要每个公司每个日期的分钟数。我的问题是,如果那天没有该公司的时间条目,我不确定用0填充日期/公司对的最佳方法 表格 Companies Time_Entries id name ... id, created_at, company_id, minutes ... 当前输出仅考虑2家公司和2天 [{"company_id":1,"company_name":"Company A","date":"2
Companies Time_Entries
id name ... id, created_at, company_id, minutes ...
当前输出仅考虑2家公司和2天
[{"company_id":1,"company_name":"Company A","date":"2013-06-24","minutes":987},
{"company_id":1,"company_name":"Company A","date":"2013-06-25","minutes":5},
{"company_id":2,"company_name":"Company B","date":"2013-06-24","minutes":500}]
预期输出要做的是,没有用0记录的pad天数将在列表中有一个附加项,其中最后一项是新项
[{"company_id":1,"company_name":"Company A","date":"2013-06-24","minutes":987},
{"company_id":1,"company_name":"Company A","date":"2013-06-25","minutes":5},
{"company_id":2,"company_name":"Company B","date":"2013-06-24","minutes":500},
{"company_id":2,"company_name":"Company B","date":"2013-06-25","minutes":0}]
当前查询(PostgreSQL)
我不知道最好的办法是什么。我可以想出几个选择:
- 通过天循环的3个深度循环,而不是通过公司循环,而不是通过发现的结果循环,以添加尚未添加的任何天/公司对
- 对postgresq中的日期范围在
上执行左连接,并将空和合并为0,但我认为这不会一直解决问题generate_series()
- 一些未知的更好更优雅的选择
@minutes = TimeEntry.where("created_at >= ?", 1.week.ago.utc)
.group('companies.id, date(created_at)')
.joins(:company)
.select("companies.id as company_id", "companies.name as company_name", "date(created_at)", "SUM(minutes) as minutes")
.order("date ASC")