Хорошо, чтобы объяснить это, у меня есть два запроса:
scope :with_free, lambda {
variants.joins(:stock)
.where(
stock: { tag: %w[Free] }
).distinct
}
scope :without_free, lambda {
variants.joins(:stock)
.where.not(
stock: { tag: %w[Free] }
).distinct
}
Итак, Variant has_many Stocks
.
Моя проблема в том, что, например:
Variant 1
имеет две акции, а именно:
Stock 1
с тэгом "Free" Stock 2
с тегом «Продажа»
другой вариант, Variant 2
, который также имеет 2 акции:
Stock 3
с тегом «Свободный» Stock 4
с тэгом "Free"
и Variant 3
, который также имеет 2 акции:
Stock 3
с тэгом "Sale" Stock 4
с тегом "Продажа"
, когда вызывается with_free
, он вернет Variant 1
и Variant 2
. Потому что у них есть Stocks
с tag: "Free"
, но когда я позвоню without_free
, он вернет Variant 1
и Variant 3
. Но мой ожидаемый результат при вызове without_free
должен быть просто Variant 3
, так как Variant 1
имеет запас с tag == "Free"
, но он также имеет Stock
с tag != "Free"
, поэтому он включен
Я хочу спросить, есть ли способ сделать так, чтобы он проверял все Stocks
, и если есть способ с tag == "Free"
, то он не будет включен в вывод.
Надеюсь, я объяснил это хорошо: (