求 hour0,hour1,hour2 之和 第一种方法 出现这样的错误 第二种方法 出现这样的错误 不知道哪里出现问题了
第一个方法不用self.
,他做为对象 方法才知道字段里的值
调用用 BrushList.last.total_condition
因为你求的是列的和,不是行的和
record = BrushList.select("sum(hour0 + hour1 ... hour23) as total")
应该出来的是个数组吧,我很少用 select
record.first.total
#3 楼 @zhq_zhq 首先 你写了两个方法:
1、第一个方法你这是在 index 的 actiion 中,这个 action 你并没有传参数,这个不是重点,重点是你的 BrushList 是个 model 吧 model 里怎么能代入 controller 层的实体参数呢,这里有问题。
2、你的 model 命名不好,模型是个个体,最好不要出现 List 这样明显指向 array 的名字,容易让别人产生误解。
3、你要做的应该是某条记录里 求几个 column 的和,这个问题如果给我的话,我会选择用数据库方法来做,就是你的第二种方法,然后你的第二种方法应该是对的,你可以看下你的 sql,他取出了多条记录的集合,然后每条记录都是你想要的。你的 total 最后不是个数字,他是一个集合。但是这个最好这样写 BrushList.select('(h+h+h+h) as total')
这样你的每个集合元素都可以用 total 拿到各自的和。然后你定义的 total 就是 total = BrushList.select('(h+h+h+h) as total').sum(&:total)
你可以先在 console 下试试~
@zhq_zhq 如果你的业务只是获得一个总数
我的原则一直都是在数据库层面把复杂的数据整理好,不过要注意性能问题,那到的是最贴近需要的少量的数据。 如果要想把数据查出来变成对象,你就得考虑下数据会不会太大,对象的实例化都是会消耗内存的。