1

我有一个带有闲置列的报告表:id, project_id, key_id, position, created_at

将填充图表的闲置代码,我现在拥有的代码,运行良好,但我面临的问题是 akey_id有多个位置,我只想key_id用 3 个位置计算 a (例如),一次。我尝试使用distinct但没有用。

谢谢

def self.chart_data(start = 1.weeks.ago, current_user)
   positions = where("position <=  50").position_by_day(start, current_user)
   (start.to_date..Date.today).map do |date|
   {
      created_at: date,  
      position: positions[date] || 0,
    }                    
 end                    
end                      

def self.position_by_day(start, current_user)
    user_projects = Project.where(user_id: current_user.id).first
    results = user_projects.reports.where(created_at:   start.beginning_of_day..Time.zone.now)
    results = results.group("date(created_at)")
    results = results.select("date(created_at) as created_at, count(*) as count")
    results.each_with_object({}) do |result, possitions|
      possitions[result.created_at.to_date] = result.count
    end                  
end

另外,为了获取用户可以拥有的所有“密钥”,我需要projects为用户获取所有信息,然后keys通过每个项目的循环获取所有信息。我怎样才能做到这一点?我可以将其包装results在一个循环中吗?还是有更好的方法?

再次感谢你。

4

2 回答 2

1

您可以使用 group 过滤不同的属性

def self.chart_data(start = 1.weeks.ago, current_user)
   positions = where("position <=  50").group('key_id, date(created_at)').position_by_day(start, current_user)
   (start.to_date..Date.today).map do |date|
   {
      created_at: date,  
      position: positions[date] || 0,
    }                    
 end                    
end

不过有一些警告。它不适用于 postgres 数据库。而且我不能说将返回哪些分组对象,这可能不是问题,或者你必须在你的 sql 中使用分组最大选择来控制它。

对于关联的键,您可以在查询中包含关联的对象,如下所示:

User.all(:conditions => {id: current_user.id}, :include => :keys)
于 2013-11-08T11:11:57.173 回答
1

用户会将所有项目发送到此方法:

def self.position_by_day(start) 
   report = where(created_at: start.beginning_of_day..Time.zone.now)
   report = report.group("date(created_at)").group(:key_id)
   report = report.select("date(created_at) as created_at, count(*) as count, key_id")
   result = report.count.inject ({}) do |hash, keydata|
     hash[keydata[0][0]] ||= 0
     hash[keydata[0][0]] += 1
     hash                 
   end                    
   return result          
 end     
于 2013-11-28T12:06:49.113 回答