ActiveRecord汇总列

时间:2013-10-22 17:30:28

标签: ruby-on-rails ruby activerecord

我想在地图内的一个表的一行上得到多个列的总和,但sum只适用于这样的模型选择:

columns = 'col1 + col2 + col3'

Model.all.map do |model|
  Model.where(:id => model.id).sum(columns)
end

我正在尝试这样做,所以我不必再次访问数据库,显然它不起作用:

columns = 'col1 + col2 + col3'

Model.all.map do |model|
  model.sum(columns)
end

关于如何做到这一点的任何想法或窍门?请注意,必须使用columns,因为columns的值会根据多个条件发生变化。

1 个答案:

答案 0 :(得分:2)

您不能在数据库外部使用SQL查询。但是,如果我理解你的问题,那么这样的事情应该有效:

columns = 'col1 + col2 + col3'

Model.select("*, #{columns} AS my_sum").map do |model|
  model.my_sum  # the calculated sum
end

确保正确转义自定义SQL查询。