0

入力されたすべてのレコードのフロートの合計を表示しようとしていますが、その方法がわかりません。これが状況です。私のアプリ(純粋に学習目的)には、スイマープロファイルを登録できるユーザーがいて、登録すると、スイマーの水泳を記録できます。スイムはスイマーに属しており、スイマーには多くのスイムがあります。

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

このアクションのビューでは、swimを繰り返して、swim.dateとswim.distanceを取得します。次に、機能しないこの行を追加します

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

私が得ているエラーは、「5500.0:Floatの未定義のメソッド `inject'」です(5500.0は、このスイマーについて記録された最初の水泳の距離です)。他のスレッドに基づいてinjectを使用しました(たとえば、Rubyで数値の配列を合計する方法は?)が、明らかに何かが欠けています。実際、これをSwimモデル(swim.rb)に#total_distanceメソッドを配置したいので、おそらくかなりの欠落がありますが、それを実行しようとすると、コントローラーにメソッドを認識させることができません。また、「キャッシング」の問題のために、ビューがモデルで定義されたメソッドにアクセスしようとしてはならないことを他の場所で読みました。

これに関する誰の役に立つガイダンスも大いに役立つでしょう。やりたいことはかなり基本的なことのように思えますが、何らかの理由で、このような質問については、多数の検索クエリを実行した後、ガイダンスが不十分であることがわかりました。ありがとう!

4

2 に答える 2

1

私はその経験ではありませんが、<%= @ smiles.inject(0){| num、n|を実行してみてください num + n [:distance]}%>

また

<%= @ distances.inject {| sum、n | 合計+n}%>

これがうまくいくことを願っています。
ありがとう。

于 2012-05-14T05:45:29.933 に答える
0

アクティブレコードの計算を確認する必要があります。すでにsumをサポートしています:http: //ar.rubyonrails.org/classes/ActiveRecord/Calculations/ClassMethods.html

于 2012-05-14T04:52:20.863 に答える