用于计算Rails app中数据列中的float元素的块或方法

时间:2012-05-14 04:45:46

标签: ruby-on-rails rails-activerecord

我试图显示输入的所有记录的浮点数的总和,我似乎无法弄清楚如何做到这一点。这是情况。我的应用程序(纯粹用于学习目的)有一个用户可以注册游泳者资料,并且这样做,可以为游泳者记录游泳。游泳属于游泳者,游泳者有很多游泳。

   // swims_controller.rb
   // SwimsController#index
   @swims = @swimmer.swims.all
   @distances = @swimmer.swims.all(:select => "distance")

在此动作的视图中,我遍历游泳以获取swim.date和swim.distance。然后我添加这行不起作用

<p>Total distance: <%= @distances.each { | x | x.distance.inject(:+).to_f } %></p>

我得到的错误是“未定义的方法`注入'为5500.0:Float”(5500.0是为这个游泳者记录的第一次游泳的距离)。我使用基于其他线程的注入(例如,How to sum array of numbers in Ruby?)但很明显,我错过了一些东西。实际上,我可能错过了很多,因为我想在Swim模型中使用#total_distance方法(swim.rb),但是当我尝试这样做时,我无法让控制器识别方法我在别处读到,由于“缓存”问题,视图不应该尝试访问模型中定义的方法。

任何人对此有用的指导都会有很大帮助。看起来像是一件非常基本的事情,但出于某些原因,在经过大量搜索查询之后,我找不到类似问题的指导。谢谢!

2 个答案:

答案 0 :(得分:1)

我不是那种经历,但尝试做&lt;%= @ swims.inject(0){| num,n | num + n [:distance]}%&gt;

OR

&lt;%= @ distances.inject {| sum,n |总和+ n}%&gt;

我希望这会奏效。
感谢。

答案 1 :(得分:0)

您应该查看有效记录计算。它已经支持了总和: http://ar.rubyonrails.org/classes/ActiveRecord/Calculations/ClassMethods.html