考虑下面这段代码:
if ids.blank?
UptimeSummary.
where("start_time >= ?", start_time).
group(:uptime_monitor_id).
select("uptime_monitor_id, sum(uptime)/count(*) AS uptime_average")
else
UptimeSummary.
where(:uptime_monitor_id => ids).
where("start_time >= ?", start_time).
group(:uptime_monitor_id).
select("uptime_monitor_id, sum(uptime)/count(*) AS uptime_average")
end这两个子句之间的唯一区别是后一个子句中的附加(:uptime_monitor_id => ids)。
这看起来相当不干练。我怎么才能把它清理干净?
发布于 2013-12-29 08:21:15
当我输入问题时,我想出了答案。因为对ActiveRecord查询链的调用是延迟的,所以您可以这样做:
q = UptimeSummary.
where("start_time >= ?", start_time).
group(:uptime_monitor_id).
select("uptime_monitor_id, sum(uptime)/count(*) AS uptime_average")
q = q.where(:uptime_monitor_ids => ids) unless ids.blank?如果你知道learn方法,我很想了解它。
https://stackoverflow.com/questions/20820842
复制相似问题