Это может быть простой вопрос, но я, кажется, вытаскиваю свои волосы, чтобы найти здесь элегантное решение. У меня есть два класса модели ActiveRecord с ассоциацией has_one и belongs_to между ними:
class Item < ActiveRecord::Base
has_one :purchase
end
class Purchase < ActiveRecord::Base
belongs_to :item
end
Я ищу элегантный способ найти все объекты Item, у которых нет связанного с ними объекта покупки, в идеале, не прибегая к использованию логического is_purchased
или аналогичного атрибута для элемента.
Сейчас у меня есть:
purchases = Purchase.all
Item.where('id not in (?)', purchases.map(&:item_id))
Что работает, но мне кажется неэффективным, поскольку он выполняет два запроса (и покупки могут быть массивными наборами записей).
Running Rails 3.1.0