Лучший способ подсчитать связанный объект от группы объектов - PullRequest
0 голосов
/ 16 апреля 2019

Как можно посчитать количество предметов, которые являются билетами в следующем сценарии? Столбец заявки находится в таблице Предметов.

Я пытаюсь получить группу выкупов, а затем подсчитать количество предметов, которые являются «билетами» для этой группы выкупов.

class Item < ActiveRecord::Base
    has_many :redemptions

class Redemption < ActiveRecord::Base
    belongs_to :item
#This method works, but is there a much better way?

def tickets_sold
        my_tickets_sold = 0
        @redemptions = Redemption.where(state: "valid")
        redemptions.each do |redemption|
            if redemption.item.ticket == true
                my_tickets_sold = my_tickets_sold + 1
            end
        end
        my_tickets_sold
    end

1 Ответ

2 голосов
/ 16 апреля 2019

Да, вы можете сделать это лучше, вы можете использовать ниже 3 способа

1) Добавить ассоциатов для получения записей о проданных билетах

has_many    :sold_tickets, -> { left_outer_joins(:item).where("state = 'valid' AND items.ticket = true ") }

2) Добавить область дляполучение количества проданных билетов

  scope :sold_tickets_count, -> { left_outer_joins(:item).where("state = 'valid' AND items.ticket = true ").count }

3) Добавить метод экземпляра в модель для получения количества проданных билетов

def sold_tickets_count
   left_outer_joins(:item).where("state = 'valid' AND items.ticket = true ").count
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...