Rails - Как рассчитать ежедневную, еженедельную, месячную общую стоимость на рельсах - PullRequest
0 голосов
/ 01 октября 2018

enter image description here У меня есть модель проданных билетов с параметрами :quantity, :price

in my application.record.rb
def total_price
 Ticket.sum(:price)
end

in my ticket index
<% @tickets.each do |t| %>
  t.total_price
<% end %>

Работает, но рассчитывается общая стоимость билета.

Что яхочу я могу разделить дневную итоговую цену, еженедельную итоговую цену и месячную итоговую цену.

Как это сделать?Пожалуйста, помогите и спасибо ..

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Вы можете использовать следующие области действия модели -

class Ticket < ApplicationRecord

  scope :daily_total_price, ->(date_time = Time.now) { where('created_at BETWEEN ? AND ?',date_time.beginning_of_day, date_time.end_of_day).sum(:subtotal) }
  scope :weekly_total_price, ->(date_time = Time.now) { where('created_at BETWEEN ? AND ?',date_time.beginning_of_week, date_time.end_of_week).sum(:subtotal) }
  scope :monthly_total_price, ->(date_time = Time.now) { where('created_at BETWEEN ? AND ?',date_time.at_beginning_of_month, date_time.end_of_month).sum(:subtotal) }

  scope :last_7d_total_price, ->(date_time = Time.now) { where('created_at >= ?', (date_time - 7.days).beginning_of_day).sum(:subtotal) }
  scope :last_30d_total_price, ->(date_time = Time.now) { where('created_at >= ?', (date_time - 30.days).beginning_of_day).sum(:subtotal) }

end

Использование областей действия

Ticket.daily_total_price # For daily scope 
Ticket.weekly_total_price # For Weekly scope 
Ticket.monthly_total_price # For monthly scope 
Ticket.last_7d_total_price # For last 7 days scope 
Ticket.last_30d_total_price # For 30 days scope 

Также вы можете передать определенную дату в качестве аргумента

# With time zone
date_time_with_zone = Time.zone.parse("2018-09-30")
Ticket.daily_total_price(date_time_with_zone)

# Without time zone
date_time = Time.parse("2018-09-30")
Ticket.daily_total_price(date_time)

Я надеюсь, что это должно работать для вашего требования.

0 голосов
/ 01 октября 2018

Для общей суммы за день

def daily_total_price
 Ticket.where("created_at >= ? AND created_at < ?", Time.now.beginning_of_day, Time.now.end_of_day).sum(:subtotal)
end

Для общей цены за неделю

def weekly_total_price
 Ticket.where("created_at >= ?", Time.now.beginning_of_week).sum(:subtotal)
end

Для общей суммы за месяц

def monthly_total_price
 Ticket.where("created_at >= ?", Time.now.beginning_of_month).sum(:subtotal)
end

Всего за последние 7 дней

def last_7_day_total_price
  Ticket.where("created_at >= ? ", (Date.today - 7.days).beginning_of_day).sum(:subtotal)
end

Всего за последние 30 дней

def last_30_day_total_price
  Ticket.where("created_at >= ? ", (Date.today - 30.days).beginning_of_day).sum(:subtotal)
end

В поле зрения

<% @tickets.each do |t| %>
  Daily total price: - <%=t.daily_total_price%>
  Weekly total price: - <%=t.weekly_total_price%>
  #.....so on..
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...