1

次のキー列を持つワークアウトのテーブルがあります。

workout_id      距離
12.32
3.1

Railsのアクティブレコードクエリを作成して、これらの列と距離の現在の合計を次のように取得するとします。

workout_id      距離      running_total12.3
2.3
2 3.1 5.4

どうすればそのようなことができますか?

4

2 に答える 2

2

データベースクエリではなくモデルで行うべきだという HungryCoder の意見に同意します。

class Workout
  # ...
  attr_accessor :running_total
  class << self
    def distance_with_running_total
      total = 0.0
      Workout.order(:id).collect do |w|
        total += w.distance
        w.running_total = total
      end
    end
  end
  # ...
end

次に、コントローラーで次のようにします。

@workouts = Workout.distance_with_running_total
于 2012-10-23T19:48:35.683 に答える
0

オブジェクトの近くで行うには、これは最も効果的な方法ではありませんが、たとえば次のようにすることができます。

<% Workout.all.map{|x| x.attributes}.each_with_index{|e, i| e["running_total"] = Workout.all.take(i + 1).map{|x| x.distance}.inject{|sum,x| sum + x}}.each do |workout| %>
    <%= workout["id"] %>
    <%= workout["distance"] %>
    <%= workout["running_total"] %>
<% end %>

ただし、これが実行している SQL クエリの数に注意してください。おそらくあなたの最善の解決策ではありません。私のコード自体もおそらく最適化される可能性がありますが、他の人がすでに指摘しているように、一般的にあなたのアプローチは最良のアイデアではないかもしれません.

于 2012-10-23T21:50:59.067 に答える