Найти все записи без связанных записей в БД [дубликаты]

0

У меня две модели

class Checkout
 has_one :order
end

class Order 
  belongs_to :checkout
end

Мне нужно найти все кассы, которые еще не заказаны. Как я могу сделать это с рельсами?

  • 0
    Checkout.includes(:order).where(orders: { id: nil }) может перечислить их.
Теги:
activerecord

2 ответа

0

Хитрость заключается в том, что include() ожидает имя ассоциации, а where ожидает имя таблицы. Для has_one ассоциация обычно выражается в единственном числе, так что она меняется, но часть where() остается такой, как есть.

  Checkout.includes(:order).where( :orders=> { :orders_id=> nil } )
  • 0
    where( :orders=> { :orders_id=> nil } ) будет выполнять запрос как .where('orders.order_id IS NULL) в SQL, что приводит к неправильному ответу.
0

Используйте left outer join, которое даст вам все проверки, объединенные с заказами. Затем выберите строки без заказов (order.id == nil)

Chceckout.left_outer_join(:orders).where('orders.id' => nil)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню