新手问题 ruby 数据库中多个字段求和

zhq_zhq · 2013年11月07日 · 最后由 badboy 回复于 2013年11月08日 · 5023 次阅读

求 hour0,hour1,hour2 之和 第一种方法 出现这样的错误 第二种方法 出现这样的错误 不知道哪里出现问题了

我看错了,第 2 个方法有错吗?迭代一下看结果。

@Rei 都有错啊!页面显示都会报错

#3 楼 @zhq_zhq 同学 鉴于你是个新手 我的第一个建议是先上传一个头像 除非你是只来问一个眼前的问题然后就把社区踢开了再也不来了。这个问题的分析我下一条回复 因为应该会打字很长时间 给你个时间去传头像 😄

第一种方法里那个 params 是要当参数传到函数里

第一个方法不用self. ,他做为对象 方法才知道字段里的值 调用用 BrushList.last.total_condition 因为你求的是列的和,不是行的和

#3 楼 @zhq_zhq 方法二是查出了结果了的,估计你页面调用结果的代码有误。

我试了一下,如果用你那条语句查,调用结果就要这样调用

total.each do |record|
  puts record["hour0 + hour1 ... hour23"]
end

应该加个 alias

total = BrushList.select("hour0 + hour1 ... hour23 as total")

total.each do |record|
  puts record.total # 就可以用 total 了
end

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 下试试~

@Rei 是的我调用错了!谢谢

@badboy 如果是你,你会怎么做????求解答

好东西呀!

对不起大家了!是我自己写错方法了!

...显眼的错,好好看看报错

@zhq_zhq 如果你的业务只是获得一个总数

我的原则一直都是在数据库层面把复杂的数据整理好,不过要注意性能问题,那到的是最贴近需要的少量的数据。 如果要想把数据查出来变成对象,你就得考虑下数据会不会太大,对象的实例化都是会消耗内存的。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号