Да, вы можете сделать это лучше, вы можете использовать ниже 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