我该怎么办才能拿走一笔?使用活动模型(Rails)

时间:2014-07-06 06:23:17

标签: ruby-on-rails

我想获得每家公司的统计数据。 每个月和总计可能分开吗? 另一方面,是否需要一个功能?

ResultModel  
    company_id , count , date
    1,3,2014-01-06 06:14:03 +0000
    1,3,2014-01-08 16:14:03 +0000
    1,3,2014-02-06 07:05:03 +0000
    1,3,2014-03-06 36:14:04 +0000
    1,3,2014-03-06 26:12:05 +0000
    1,3,2014-03-06 06:23:05 +0000
    2,3,2014-03-06 06:23:05 +0000



Result
company_id , month , total
1 , 201401 , 2
1 , 201402 , 1
1 , 201403 , 3

1 个答案:

答案 0 :(得分:1)

Alias Column

您可以通过使用alias列来实现此目的,如this Railscast(06:30)中所述:

enter image description here

你可以这样做:

#app/models/result.rb
Class Result < ActiveRecord::Base
   has_many :more_results, -> { select("#{Result.table_name}.*, #{ResultModel.table_name}.month AS new_month")}
end

这使您能够从数据库中提取关联数据,从而允许您对其执行计算。我相信这会导致n+1查询问题,但希望能为您提供一些工作方法。

-

<强> Definition:

  

别名是SQL的一项功能,大多数人都支持,如果不是全部的话,   关系数据库管理系统(RDBMS)。别名提供   数据库管理员以及其他数据库用户   能够减少查询和制作所需的代码量   查询通常更容易理解。另外,别名也可以   用作混淆技术来保护数据库的真实名称   字段。

您遇到的问题是,调用您的单个模型的数据无法访问您使其运行所需的所有数据。相反,你应该看看你如何通过一个关联来调用其他模型的数据


<强>计数

我不确定你想要&#34;计算月数&#34;是什么意思,但我知道你可以包含一个COUNT方法这样:

#app/models/result.rb
Class Result < ActiveRecord::Base
   has_many :more_results, -> { select("#{Result.table_name}.*, count(#{ResultModel.table_name}.month) AS total")}
end