2013-08-07 2 views
0

Недавно я столкнулся с каким-то странным поведением 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 по этому отношению, которое существенно изменяет запрос, возвращает хеш и тормозит код.

Это подразумеваемое поведение?

Для меня это не противоречит интуиции, чтобы изменить семантику метода в зависимости от того, была ли загружена связь или нет.

ответ

0

Так работает взаимодействие ActiveRecord. Вы можете преобразовать его в массив и сделать на нем размер.

a = Stat.aggregated.to_a 
#in other place 
if a.size > 0 
    'do stuff' 
else 
    'do other stuff' 
end 
Смежные вопросы