如何在Rails中使用SQL统计去年的发票总额?

如何在Rails中使用SQL统计去年的发票总额?,sql,ruby-on-rails,ruby,Sql,Ruby On Rails,Ruby,我需要清点去年所有的发票金额。我使用helper方法来实现这一点,但据我所知,有一种更好的方法,使用SQL函数SUM()只对数据库进行一次查询 我的发票表: create_表“invoices”,force::cascade do|t| t、 字符串“title” t、 文本“说明” t、 字符串“类别” t、 十进制“金额” t、 bigint“user_id”,null:false t、 datetime“created_at”,null:false t、 datetime“更新时间”,nu

我需要清点去年所有的发票金额。我使用helper方法来实现这一点,但据我所知,有一种更好的方法,使用SQL函数SUM()只对数据库进行一次查询

我的发票表:

create_表“invoices”,force::cascade do|t|
t、 字符串“title”
t、 文本“说明”
t、 字符串“类别”
t、 十进制“金额”
t、 bigint“user_id”,null:false
t、 datetime“created_at”,null:false
t、 datetime“更新时间”,null:false
t、 索引[“用户id”],名称:“用户id上的索引”
结束
我当前使用Ruby进行多个数据库查询和求和的方法:

#invoice.rb模型的发票范围为_年
范围:发票_年,->{where('extract(year from created_at)=?',Time.now.strftime(“%Y”)。to_i)}
#索引方法中的invoices\u controller.rb具有\u年的@invoices\u
发票=发票.all.available(当前用户)
@年度发票=年度发票。年度发票
#在helper中,我计算所有的数量
def计数\年度\花费
@年度发票。减少(0){sum,发票{sum+invoice.amount}
结束
如何使用Ruby内部的SQL计算一个请求中的金额?

我会试试

Invoice
  .where(created_at: (Time.current.beginning_of_year..Time.current.end_of_year))
  .sum(:amount)
或者您可以在模型中定义一个范围,如

scope :by_year, -> (year) { where('extract(year from created_at) = ?', year) }
像这样使用它

Invoice.by_year(Date.today.year).sum(:amount)

应该行。谢谢Stefan,使用求和法很容易