2015-07-02 16 views

Odpowiedz

9

Wygląda Składanie to nowy rekord (od id jest zerowa). Jeśli jest nowy, nie dotarł jeszcze do bazy danych. count wywołuje SQL do bazy danych w celu ustalenia liczby wierszy, więc słusznie zwraca zero. any? zwraca true, ponieważ w kolekcji jest obiekt.

Co się stanie, jeśli spróbujesz @card.submissions.to_a.size (aby upewnić się, że załadujesz je z bazy danych, sprawdź rozmiar tablicy).

+0

To prawda, dzisiaj nauczyłem się czegoś. Dla odniesienia, tutaj jest metoda ['count'] (http://edgeapi.rubyonrails.org/classes/ActiveRecord/Associations/CollectionProxy.html#method-i-count) i [" any? "] (Http: //edgeapi.rubyonrails.org/classes/ActiveRecord/Associations/CollectionProxy.html#method-i-any-3F) metody. – sjagr

+0

Phillip, masz rację. To zwraca 1. Mam formularz do przesłania (i inicjuję go za pomocą Submission.new) na tej samej stronie. Jak mógłbym rozwiązać ten problem? (bez użycia @ card.submission.count ... co widzę jako nieelegancki) – alejoriveralara

+1

"@ card.submissions.size" byłoby wystarczające - relacja nie definiuje metody size, więc przekaże ją do miejsca docelowego. BTW - używanie 'size' zamiast' count' jest dobrym sposobem na pozbycie się problemu N + 1. – BroiSatse

0

Stare pytanie, ale mimo to chciałbym się zetknąć. Natknąłem się na podobny problem, i stwierdził:

@card.submissions.any? = true 
@card.submissions.count = 0 

choć nie było rekordy w mojej bazy danych, ale ja zainicjowane pusty @card.submission przedmiot, który był w tablicy @card.submissions.

Aby złagodzić ten problem, próbowałem

@card.submissions.all.any? 

który Reaktywacja tablicę z bazy danych i wrócił false.

Powiązane problemy