我有一个包含以下关键列的训练表:
workout_id 的距离
1个2.3
2 3.1
假设我想写一个Rails活动记录查询,以便我得到这些列加上距离的运行总计,如下所示:
workout_id 的距离的 running_total
1个2.3 2.3
2个3.1 5.4
我怎么能这样做?
答案 0 :(得分: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
答案 1 :(得分: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查询。可能不是你最好的解决方案。我的代码本身也可能会得到优化,但总的来说,你的方法可能不像其他人已经指出的那样最好。