Я рекомендовал использовать функцию размера.
class Customer < ActiveRecord::Base
has_many :customer_activities
end
class CustomerActivity < ActiveRecord::Base
belongs_to :customer, counter_cache: true
end
Рассмотрим эти две модели.У клиента есть много действий клиента.
Если вы используете: counter_cache для ассоциации has_many, размер будет напрямую использовать кэшированный счетчик, и вообще не будет делать дополнительный запрос.
Рассмотрим один примерВ моей базе данных один клиент имеет 20 000 клиентских операций, и я пытаюсь подсчитать количество записей о клиентских действиях этого клиента с помощью каждого из методов подсчета, длины и размера.здесь ниже сравнительный отчет по всем этим методам.
user system total real
Count: 0.000000 0.000000 0.000000 ( 0.006105)
Size: 0.010000 0.000000 0.010000 ( 0.003797)
Length: 0.030000 0.000000 0.030000 ( 0.026481)
, поэтому я обнаружил, что использование: counter_cache Size - лучший вариант для расчета количества записей.