Ruby on rails 使用表达式rails对活动记录求和
我的sql视图中有以下代码:Ruby on rails 使用表达式rails对活动记录求和,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,我的sql视图中有以下代码: SELECT reports.`date` reports.book_title SUM( reports.net_sold_count * reports.avg_list_price / 10 ) AS revenue FROM reports GROUP BY reports.date, reports.book_title 我需要把它翻译成ruby代码 我有活动记录模型 class Report <
SELECT
reports.`date`
reports.book_title
SUM( reports.net_sold_count * reports.avg_list_price / 10 ) AS revenue
FROM
reports
GROUP BY
reports.date,
reports.book_title
我需要把它翻译成ruby代码
我有活动记录模型
class Report < ActiveRecord::Base
但我不知道下一步该怎么办,因为在所有示例中,.sum
只接受一个参数。()
UPD:
现在,我正在考虑尝试类似的东西
Report.select('date, book_title, SUM( reports.net_sold_count * reports.avg_list_price / 10 ) AS revenue').group(:date, :book_title)
#sum
文档具有误导性。是的,#sum
只接受一个参数,但该参数不必是与列名对应的符号,该参数也可以是使用可用列的SQL表达式。特别是,#sum
的参数可以是Ruby字符串:
'reports.net_sold_count * reports.avg_list_price / 10'
所以你可以说:
Report.group(:date, :book_title).sum('reports.net_sold_count * reports.avg_list_price / 10')
这将给您一个如下所示的哈希:
{
[some_date, some_title] => some_sum,
...
}
你可以在Ruby land中根据需要进行分离。如果我需要像对象数组这样的结果怎么办?
[{:date=>some_-date,title:=>some_-title,:sum=>some_-sum},…]
(类似于执行sql代码的结果,我建议过)那么你可以用一点点Ruby“根据需要进行分离”,可能使用类似于map{(a,b),c{:a=>a,:b=>b,:c=>c}}
的东西。也许阿雷尔能帮上忙
{
[some_date, some_title] => some_sum,
...
}