У меня есть сайт, где клиенты могут приобрести билеты на мероприятие, и я создал класс Reporter::EventTickets
для создания хэша для нужной мне информации. Reporter::EventTickets
вызывается в контроллере отчетов, и в конечном итоге я хочу просмотреть это на странице отчета администратора.
Я не могу получить информацию, отображаемую на моей таблице в моем файле представления haml! Я перепробовал все, что мог придумать, и совершенно не понимаю, что делать.
Информация успешно сохраняется в базе данных (PostgreSQL), и класс EventTickets корректно преобразовывает данные (проходя тесты RSpec).
Код:
class Reporter::EventTickets
include Virtus.model
def events
products.map do |product|
line_items = LineItem.includes(:order)
.where("orders.completed_at IS NOT NULL")
.where(purchasable_type: "Product", purchasable_id: product.id)
.references(:order)
ticket_purchases = line_items.map do |line_item|
order = line_item.order
[order.bill_address_full_name, order.email, line_item.quantity]
end
total = ticket_purchases.reduce(0) { |sum, purchase| sum + purchase.last }
{
date: product.event_date,
name: product.name,
total: total,
purchases: ticket_purchases.sort
}
end
end
private
def products
Ticket.where("event_date >= ?", week_ago_in_time_zone).order("event_date ASC")
end
def week_ago_in_time_zone
(Time.current - 7.days).to_date
end
end
Контроллер:
def event_tickets
@reporter = Reporter::EventTickets.new
@csv_link = admin_reports_event_tickets_path(format: :csv)
respond_with @reporter
end
Модели:
class Order < ActiveRecord::Base
has_many :line_items, dependent: :destroy
class LineItem < ActiveRecord::Base
belongs_to :order, touch: true
belongs_to :purchasable, polymorphic: true
class Product < ActiveRecord::Base
include Purchasable
has_many :line_items, as: :purchasable
Вид:
= render partial: "admin/shared/header", locals: {title: "Event Ticket Purchases"}
.container-fluid.padded
= render partial: "admin/shared/notifications"
.row-fluid.hidden-print
= link_to "Download CSV", @csv_link, class: "btn btn-blue"
.row-fluid
- @reporter.events.each do |event|
%h3
= event[:date].strftime("%_m/%e")
= event[:name]
.box
%table.table.table-normal
%thead
%tr
%td Name
%td Email
%td Tickets
%tbody
- event[:purchases].each do |purchase|
%tr
- purchase.each do |column|
%td= column
%tr
%td{:colspan => "2"}
%b TOTAL
%td
%b= event[:total]
В Rails нет ошибок, и страница загружается с заголовком и кнопкой. Таблица просто не заполняется.