У меня есть следующие классы
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.
Любая помощь приветствуется.