汇总模型中的所有属性?

时间:2018-06-19 20:48:50

标签: sql ruby-on-rails ruby activerecord

我很好奇,是否有一种简单的方法可以对模型中的所有属性求和而不使它看起来重复,而不是DRY。

我有一个捐赠应用程序,这就是我汇总所有内容的方式:

def self.total_donations
    array = Category.pluck(
    'SUM(toilet_paper)',
    'SUM(dental_hygiene)',
    'SUM(first_aid)',
    'SUM(general_hygiene)',
    'SUM(underwear_socks)',
    'SUM(blankets)',
    'SUM(school_supplies)',
    'SUM(diapers)').flatten.compact
    array.inject(0){|sum, x| sum + x}
end 

这很丑陋,但我不知道如何在不进行此类操作的情况下将所有内容加起来。

谢谢!

1 个答案:

答案 0 :(得分:1)

看看这个:

def self.total_donations
  sum("toilet_paper + dental_hygiene + first_aid + general_hygiene + underwear_socks + blankets + school_supplies + diapers")
end

生成的SQL:

SELECT SUM(toilet_paper + dental_hygiene + first_aid + general_hygiene + underwear_socks + blankets + school_supplies + diapers)
FROM "categories"
  • 短(不可能短)
  • 高效(所有处理均在数据库层完成)

请注意,在类实例方法中,不必使用Category,因为它是self(假设方法在Category模型中)。