ruby-on-rails

Rails method fo cumulative sum of older items


A class Event has methods

def event_revenues
  event_sales.sum(&:sales_price)
end

  
def event_costs
  event_sales.sum(&:sales_cost) 
end
  
def event_contributions
  event_revenues - event_costs
end

and an attribute start_date.

How does one devise a method that cumulates all the event_contributions for events with start_date on or before self.start_date ?


Solution

  • Solution can be like

    def event_contributions(something)
      relation = Event
      relation = relation.where('start_date < ?', something) if something
      relation.select('sum(sales_price - sales_cost) AS contribution').sum(&:contribution)
    end