Ruby on rails 3 Rails和活动记录中的运行总数
我有一个包含以下关键列的训练表: 训练\u id距离Ruby on rails 3 Rails和活动记录中的运行总数,ruby-on-rails-3,activerecord,Ruby On Rails 3,Activerecord,我有一个包含以下关键列的训练表: 训练\u id距离 12.3 23.1 假设我想写一个Rails活动记录查询,这样我可以得到这些列加上运行总距离,如下所示: 训练id距离跑步总量 12.32.3 23.15.4 我怎么能做这样的事情呢?我同意HungryCoder的观点,即您可能应该在模型中而不是在数据库查询中进行操作 class Workout # ... attr_accessor :running_total class << self def dista
12.3
23.1
假设我想写一个Rails活动记录查询,这样我可以得到这些列加上运行总距离,如下所示: 训练id距离跑步总量
12.32.3
23.15.4
我怎么能做这样的事情呢?我同意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
要使其更靠近对象,尽管这不是最有效的方法,但您可以执行以下操作,例如:
<% 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查询。可能不是你最好的解决方案。我的代码本身也可能会得到优化,但一般来说,您的方法可能不是其他人已经指出的最佳方法。最好在获取记录后再这样做!对于累积,您可能需要依赖子查询,这将是缓慢的!在保存我的记录的对象中是否有这样做的方法?假设返回的记录存储在
训练中
,是否有办法将此running\u total
属性添加到每个记录中,基本上混合了ActiveRecord和此临时属性?谢谢。在尽可能避免繁重的SQL方面,这对我来说是一个很好的学习。
<% 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 %>