Недавно я столкнулся с каким-то странным поведением ActiveRecord Relation. Предположим, у меня есть Stat
модель со следующими Недвижимость Болгария Недвижимость:ActiveRecord Размер отношения странное поведение
clicks
views
created_at
- и другие
Далее предположим, у меня есть следующие сферы:
scope :aggregated, select('SUM(clicks) as clicks, SUM(views) as views).group('DATE(created_at)')
В результате я ожидаю получить массив объекта Stat с информацией, агрегированной по дням, и так оно и есть. Но теперь подумайте:
# in one place
a = Stat.aggregated
#in other place
if a.size > 0
'do stuff'
else
'do other stuff'
end
И он работает отлично если a
отношение загружается, но когда a
не грузится он не с method undefined
ошибки. Оказывается, что когда отношение не загружается, размер вызывает count
по этому отношению, которое существенно изменяет запрос, возвращает хеш и тормозит код.
Это подразумеваемое поведение?
Для меня это не противоречит интуиции, чтобы изменить семантику метода в зависимости от того, была ли загружена связь или нет.