我有以下课程
class Service < ActiveRecord::Base
has_many :incidents
end
class Incident < ActiveRecord::Base
belongs_to :service
named_scope :active, lambda ...
named_scope :inactive, lambda ...
end
我正在尝试预加载每个事件类的计数,以便我的视图可以执行 类似的东西:
<% Service.all.each do |s| %>
<%= s.active.count =>
<%= s.inactive.count =>
<% end %>
不对每个计数进行SQL查询。我正在尝试选择一种方法 但我没有太多运气。这是我到目前为止所做的:
# In Service class
def self.fetch_incident_counts
select('services.*, count(incidents.id) as acknowledged_incident_count').
joins('left outer join incidents on incidents.service_id = services.id').
where('incidents.service_id = services.id AND ... same conditions as active scope').
group('services.id')
end
这将预取一个计数,但我不知道如何为两个不同的计数 named_scope。
使用counter_cache不是一个选项,因为数据库是由非rails代码写入的。
欢迎任何帮助。