named_scope, group by i wielkość tablicy

Witam.
Nie umiem znaleźć rozwiązania na mój problem, mam sobie w modelu named_scope, które dobrze zwraca tablicę, jednak źle zwraca jej rozmiar…

przykład:

named_scope :published, :joins => :publication_periods, :group => 'articles.id', :conditions => ['? between publication_periods.start AND publication_periods.stop', Time.now ]
tablica jest ok i co ciekawe są w niej dwa elementy w moim przypadku, czyli tak jak powinno.

niestety

  Articles.published.size

zwraca inną wielkość tablicy. Zauważyłem, że przy tworzeniu zapytania sql gubi mu się “group by”. Może ktoś się z tym spotkał i zna rozwiązanie?

a spróbuj metody length zamiast size

działa, dziękuje bardzo.

można się machnąć na tym

Nie machnąć :wink: To nie jest prawidłowe zachowanie tylko bug: http://rails.lighthouseapp.com/projects/8994/tickets/1349-named-scope-with-group-by-bug

W AR są 3 metody do sprawdzania wielkości kolekcji: count, size i length.

length pobiera kolekcję do pamięci (o ile nie jest pobrana) i zwraca jej wielkość
count wykonuje SQLowe COUNT
size podaje wielkość kolekcji jeżeli jest wczytana, w przeciwnym wypadku robi count

Dlatego jak robisz size wykonuje się tak naprawdę count, który zwraca błędny wynik z uwagi na powyższy bug.

Spróbuj wykonać size na pobranej kolekcji - powinien zwrócić prawidłową wartość.