Я использую Rails 3.0.У меня есть две таблицы: списки и предложения.Листинг has-many
Предложения.Предложение может иметь accepted
быть true
или false
.
. Я хочу выбрать каждый листинг, который не имеет предложения, с accepted
, являющимся истинным.Я пытался
Listing.joins(:offers).where('offers.accepted' => false)
Однако, поскольку в листинге может быть много предложений, при этом выбираются все листинги, в которых есть непринятые предложения, даже если для этого листинга есть принятое предложение.В случае, если неясно, что я хочу, это дополнение набора:
Listing.joins(:offers).where('offers.accepted' => true)
Мое текущее временное решение состоит в том, чтобы захватить их все, а затем выполнить фильтрацию массива, например:*
class Listing < ActiveRecord::Base
...
def self.open
Listing.all.find_all {|l| l.open? }
end
def open?
!offers.exists?(:accepted => true)
end
end
Я бы предпочел, чтобы решение запускало фильтрацию на стороне базы данных.