Rails: How to sum total price per day

╄→尐↘猪︶ㄣ 提交于 2019-12-25 01:49:58

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!