Существует две модели Ticket и Account. В аккаунте много билетов. Я пытаюсь получить последний созданный тикет для каждой учетной записи.
accounts = Account.where(:deleted => false).pluck(:id)
tickets = Ticket.left_outer_joins(:account)
.where(:account_id => accounts)
.order(created_at: :desc)
ticket_ids = Array.new
accounts.each do |account|
ticket = tickets.where(:account_id => account).order(created_at: :desc).limit(1).first
if !ticket.blank?
ticket_ids.push(ticket.id)
end
end
@tickets = tickets.where(:id => ticket_ids).order(created_at: :desc)
Приведенный выше код работает, и @tickets содержит ожидаемый результат. Но проблема в том, что приведенный выше код занимает так много времени. Есть ли способ сделать все это в самом запросе на выборку? или есть ли способ оптимизировать его?
База данных, которую я использую: Mysql