czwartek, 25 września 2014

Sumowanie wartości w rekordach wybranego już zestawu z bazy danych

Rozważmy taki scenariusz: wybraliśmy wszystkich klientów, którzy w zadanym okresie kupili więcej niż jeden towar z naszego sklepu internetowego. Otrzymaliśmy zestaw klientów wraz z ilością zakupionych towarów i sumą cen tych towarów per klient.
A co jeśli chcemy zsumować ilość wszystkich towarów zakupionych przez klientów w tym zestawie?
Zawsze robiłem to tak:
  @customers.sum(&:amount)
No i fajnie. Działało. Działało do momentu, dopóki nie sumowałem ilości przepracowanych godzin, które to godziny było obliczane z dat. Z niewiadomych przyczyn generowana kolumna była w formacie string i sumowanie tworzyło wielki string.

Można to zrobić tak:
  @customers.sum{|customer| customer.amount.to_i}
Problem znika.

2 komentarze:

  1. Bardzo fajne wytłumaczenie czasami proste rozwiązania są najlepsze

    OdpowiedzUsuń
  2. Dzięki za info! Miałem podobny problem i udało mi się go rozwiązać z Twoją pomocą.

    OdpowiedzUsuń