Displaying information about a ticket purchase
I finally figured out a better approach to avoid those complex logic in my view by using a presenter pattern. I create a presenter directory in my app folder and subfolder for the event controller and a tickets_report_presenter.rb file with the following code 

module Events
  class TicketsReportPresenter
    attr_reader :event 

    def initialize(event)
      @event = event
    end

    def all_bookings 
      event.bookings.paginate(page: 1, per_page: 20)
    end 

    def attendees 
      event.attendees.paginate(page: 1, per_page: 20)
    end 

    def ticket_types 
      event.ticket_types.map do |ticket| 
         Report::Ticket.new(ticket) 
      end
    end 

    def grand_quantity 
      ticket_types.map(&amp;:quantity).inject(0, &amp;:+)
    end

    def ticket_left 
      ticket_types.map(&amp;:remains).inject(0, &amp;:+)
    end

    def quantity_sold 
      ticket_types.map(&amp;:tickets_sold).inject(0, &amp;:+)
    end 

    def total_price 
      ticket_types.map(&amp;:price).inject(0, &amp;:+)
    end

    def total_amount 
      ticket_types.map(&amp;:amount).inject(0, &amp;:+)
    end   

  end

  module Report 
    class Ticket
      attr_reader :ticket

      def initialize(ticket)
        @ticket = ticket
      end  

      def name
        ticket.name  
      end 

      def quantity 
        ticket.quantity.to_i 
      end 

      def tickets_sold
        ticket.user_tickets.count.to_i 
      end 

      def price 
        ticket.price.to_i 
      end

      def remains 
        quantity - tickets_sold 
      end 

      def amount 
        price * tickets_sold 
      end 
    end 
  end  
end 


Then in my tickets_report action, I did this 

def tickets_report 
    @presenter = Events::TicketsReportPresenter.new(@event)
end 


This allows be to call the following methods in my view:

@presenter.all_bookings 
@presenter.attendees 
@presenter.ticket_types
@presenter.grand_quantity 
@presenter.ticket_left 


Thanks to anyone who viewed this.