【问题标题】:Rails: How to sum total price per dayRails:如何计算每天的总价格
【发布时间】:2018-10-23 09:59:39
【问题描述】:

我想计算售出当天的门票总价。

但它显示了最后一天的总价(今天的总价)。

我现在得到了什么:

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

我真正想要的是:

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

我想要的是如何计算每天的总价(售票当天的总价)?

在票证模型中

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) }

在工单控制器中

def index
    @tickets = Ticket.all.order("created_at DESC")
    @users = User.all
end

在票证索引中

<% tickets.each do |ticket| %>
  <%= ticket.created_at.strftime("%d %B") %>
  <%= ticket.user.username %>
  <%= ticket.price %>
<% end %>

<%= Ticket.daily_total_price) %>

感谢您的帮助:)

【问题讨论】:

  • 可能日期重叠并且从第二天开始计算 1.11?
  • @Garbela 在您的 ticket/index.html.erb 中,您将 Time.zone.parse("2018-10-23") 直接传递给您的 Ticket.daily_total_price()。您需要传入与其上方门票日期相对应的日期时间。换句话说,(假设您有另一个未在 index.html.erb 中显示的外部循环每天循环,那么像 &lt;%= Ticket.daily_total_price(tickets.first.created_at) %&gt; 这样的东西会起作用
  • @Jay-ArPolidario 是的,它的工作.. 非常感谢你先生 :)
  • @Garbela 没问题! :)) 祝你好运!
  • 您可能会按本地时间的日期分组错误。如果不适合您的时钟,您可以使用 scope :daily_total_price, -&gt;(date_time = Time.current) 来比较显示的日期和时间。

标签: ruby-on-rails ruby-on-rails-5.2


【解决方案1】:

所以要做你想做的,我想下面的代码......

<% 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 %>

【讨论】:

  • 另一个问题,我如何分组一个月的总价?例如:10 月的总数,11 月的总数等。?谢谢
  • 听起来是个新问题!您为什么不发布问题并展示您的尝试?解决方案应该与上述类似,但您需要一个Ticket.montly_total_price(date) 方法。
【解决方案2】:

你在做

<%= Ticket.daily_total_price %>

但这总是将第一个参数默认为今天的日期(你写了-&gt;(date_time = Time.now)你想要做的是传递适当的日期......将日期放入控制器中的“@date”实例变量中,然后做...

<%= Ticket.daily_total_price(@date) %>

【讨论】:

  • 如何将日期放入控制器中的“@date”实例变量中?
  • 向我们展示您在其中构建 tickets 变量的代码。这也是您要将日期分配给变量的地方...
  • 对不起,我不明白。
  • 我应该在控制器上写什么?
  • 在tickets/index.rb 中你正在做&lt;% tickets.each do |ticket| %&gt; 所以你在某个地方定义了tickets,对吧?在您的TicketsController 中?能否请您出示该代码?
猜你喜欢
  • 2021-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 2021-01-27
相关资源
最近更新 更多