zaper
1
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
Killa
4
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.
zaper
5
A jak to zrobić aby to było w bazie danych? a nie w widoku.
Bo potem chciałbym to exportować do CSV
bed0l
6
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.