我有以下结构:
AtomType上的方法current_total_sales
从相同的AtomType获取Atoms中总销售额的最大日期,并获得从同一日期开始的所有TotalSales。
def current_total_sales
current_start_date = TotalSales.where(atom_id: atoms.pluck(:id)).maximum(:start_date)
TotalSales.where(atom_id: atoms.pluck(:id), start_date: current_start_date)
end
它可以更有效吗?
AtomType上的方法red_priorities
获取具有使用status_id > 2
的PerformanceAnalysis的TotalSales的所有Atom,并按priority
排序它们(PerformanceAnalysis属性)。
def red_priorities
PerformanceAnalysis.where(total_sales: current_total_sales).
where("status_id > 2").
order("priority").map(&:atom)
end
它还能更有效吗?
谢谢!
答案 0 :(得分:0)
我想把current_start_date
对象解压缩到一个方法,然后改变red_priorities
方法直接查看Atoms表加入我需要限制的地方。这样我就避免了查询结束时的map(:atom)
(这不是SQL查询的一部分)。
def current_start_date
current_start_date = TotalSales.where(atom_id: atoms.pluck(:id)).maximum(:start_date)
end
def current_total_sales
TotalSales.where(atom_id: atoms.pluck(:id), start_date: current_start_date)
end
def red_priorities
Atom.joins(:total_sales => :performance_analysis).
where("total_sales.start_date = ?", current_start_date).
where("performance_analyses.status_id > 2").order("performance_analyses.priority")
end