【发布时间】:2016-07-30 01:43:52
【问题描述】:
我有 2 个模型 User 和 Order。我需要生成一个图表,它将在数组中检索每月余额。在我的Order 表中,我有earnings 和costs。以下是我提出的一些建议:
用户.rb
class User < ActiveRecord::Base
def baltime(time) #This will return balance based on time
orders.where("created_at < ?", time).map(&:earning).compact.inject(:+).to_f -
orders.live.where("created_at < ?", time).map(&:costs).compact.inject(:+).to_f
end
def group_by_months
result = []
forteenmonths = 14.times.map { |i| (Date.today - (i).month)}.reverse
forteenmonths.each do |d|
result << self.baltime(d)
end
result #This will return an array of the order balances
end
上面的方法是有效的,但是,它会从数据库中调用 14 个查询。有没有更好的方法可以解决 N+1 问题?提前致谢
【问题讨论】:
标签: sql ruby-on-rails arrays activerecord