Я пытаюсь использовать Active Record, чтобы найти родителей, у которых ни один из детей не соответствует определенным условиям.
В моем приложении пользователи могут публиковать ставки на элементах .Одна ставка устанавливается в качестве победителя с помощью перечисления status
. Я пытаюсь вернуть список предметов, которые не имеют выигрышной ставки.
Вот соответствующий код:
# item.rb
class Item < ApplicationRecord
has_many :bids
scope :without_winner, -> { joins(:bids).where.not(bids: { status: :won }) }
end
# bid.rb
class Bid < ApplicationRecord
belongs_to :item
enum status: { pending: 0, won: 1, lost: 2 }
end
Моя проблема в том, чтотекущая :without_winner
область будет возвращать элемент каждый раз, когда имеет неудавшуюся ставку.Например, если у нас есть два Предмета с тремя Ставками каждый:
Item 1
Bid 1 (won)
Bid 2 (lost)
Bid 3 (lost)
Item 2
Bid 4 (pending)
Bid 5 (pending)
Bid 6 (pending)
Моя текущая область действия :without_winner
вернет Предмет 1 дважды и Предмет 2 три раза.Мой желаемый результат будет просто возвращать элемент 2 один раз и вообще не возвращать элемент 1.
Как я могу исправить свою область, чтобы получить список уникальных элементов без выигрышной ставки?