Sumowanie rekordów w tablicy

Cześć
Mam takie pytanie, otóż mam relację site - booking
Na site bookuje dana ilość $$

W widoku show w site wyświetlam sobie wszystkie bookingi

    <%@site.bookings.each do |b|%>
<td><%=b.name%></td>
<td><%=b.cost%></td>
<td><%=b.from%></td>
<td><%=b.to%></td><%end%>

Tutaj wszystko jest ok.Bookować mogę dowolną ilość.

Jak to zsumować aby wyświetlić ogólny cost zabookowany?

Tabela wygląda tak

  create_table "bookings", force: true do |t|
t.integer  "site_id"
t.string   "name"
t.integer  "cost"
t.date     "to"
t.date     "from"
t.datetime "created_at"
t.datetime "updated_at" end

Czy pomógłby mi ktoś z tą zagwostką ?

Pozdrawiam!

Rozumiem, że chodzi Ci o zsumowanie ceny (cost) konkretnego Site’a?

@site = Site.first # dowolny obiekt Site
@booking_sum = @site.bookings.pluck(:cost).inject(:+)

W modelu zdefiniuj:

def booking_sum
  bookings.pluck(:cost).inject(:+)
end

site.booking_sum => 50
1 Like

.sum ?

Co do

def booking_sum
  bookings.pluck(:cost).inject(:+)
end

Nie mam konsoli pod ręką, ale wydaje mi się, że

bookings.sum(:cost)

zrobi dokładnie to samo, a o wiele sprawniej.

A jak to zrobić aby to było w bazie danych? a nie w widoku.

Bo potem chciałbym to exportować do CSV

Możesz wyeksportować takie dane do CSV za pomocą klasy: http://ruby-doc.org/stdlib-2.2.0.preview1/libdoc/csv/rdoc/CSV.html . Jeśli jednak wolisz mieć zapisane w bazie danych możesz dodać jakąś kolumnę na sumy i zapisywać w niej wynik.