Rails总和一对多错误

时间:2015-02-12 18:29:49

标签: ruby-on-rails ruby

我有书。每本书都有章节列表。每章都有文字。我需要计算字符的总值。我写了这样的代码:

symbols = 0
b.chapters.all.each do |c|
    symbols += c.text.length
end

这样做很好。但是,当我锻炼时:

symbols = b.chapters.all.sum(:text.length)

它返回无效的字符数。有没有人有任何建议我错了?

1 个答案:

答案 0 :(得分:1)

您可以使用#sum

的块版本进行编写
b.chapters.sum { |c| c.text.length }

这是错误的:b.chapters.all.sum(:text.length)

因为 - :text.length会将符号:text的长度设为4。并且4总结为 n 次,其中 n 是集合b.chapters的大小。

我尝试使用我的项目中的数据:

[21] pry(main)> Menu.first.dishes.count # => 5
[22] pry(main)> Menu.first.dishes.map { |d| d.dish_type.size } # => [9, 7, 5, 7, 6]
[23] pry(main)> Menu.first.dishes.sum { |d| d.dish_type.size } # => 34

has_manyDish之间有Menu个关联。现在看下面的另一件事,这让你的傻瓜:

 Menu.first.dishes.sum(:a.size) # => 5