问题
I want to calculate total price of ticket sales on the day it sold.
But it shows total price of the last day (Today's total price).
What i got now :
October 20
Ticket 1 USD 1.11
Ticket 2 USD 2.22
Ticket 3 USD 3.33
Total For Today
USD 7.77 (HERE'S THE PROBLEM)
-------------------------------
October 21
Ticket 1 USD 1.11
Ticket 2 USD 2.22
Ticket 3 USD 4.44
Today's total
USD 7.77
What i exactly want is :
October 20
Ticket 1 USD 1.11
Ticket 2 USD 2.22
Ticket 3 USD 3.33
Today's total
USD 6.66
-------------------------------
October 21
Ticket 1 USD 1.11
Ticket 2 USD 2.22
Ticket 3 USD 4.44
Total For Today USD 7.77
What i want is how to calculate total price of each day (total price on the day those tickets has been sold)?
In ticket model
scope :daily_total_price, ->(date_time = Time.now) { where('created_at BETWEEN ? AND ?',date_time.beginning_of_day, date_time.end_of_day).sum(:price) }
In Ticket controller
def index
@tickets = Ticket.all.order("created_at DESC")
@users = User.all
end
In Ticket index
<% tickets.each do |ticket| %>
<%= ticket.created_at.strftime("%d %B") %>
<%= ticket.user.username %>
<%= ticket.price %>
<% end %>
<%= Ticket.daily_total_price) %>
Thank for helping :)
回答1:
So to do what you want, I'd imagine the following code...
<% date_for_group = nil %>
<% @tickets.each do |ticket| %>
<% if ticket.created_at.to_date != date_for_group %>
<%# show total of previous group %>
<% if date_for_group %>
<br/>
Total for <%=date_for_group.strftime("%d %B") %></br>
<%= Ticket.daily_total_price(date_for_group) %>
<br/>
<% end %>
<%= ticket.created_at.strftime("%d %B") %>
<br/>
<% date_for_group = ticket.created_at.to_date %>
<% end %>
<%= ticket.user.username %>
<%= ticket.price %>
<% end %>
<% if date_for_group %>
<br/>
Total for <%=date_for_group.strftime("%d %B") %></br>
<%= Ticket.daily_total_price(date_for_group) %>
<br/>
<% end %>
回答2:
You're doing
<%= Ticket.daily_total_price %>
But that always defaults the first argument to today's date (you wrote ->(date_time = Time.now)
What you want to do is to pass the appropriate date in... put the date into a '@date' instance variable in your controller and then do...
<%= Ticket.daily_total_price(@date) %>
来源:https://stackoverflow.com/questions/52946245/rails-how-to-sum-total-price-per-day