metasearch has_many, где все / ни один должен совпадать - PullRequest
0 голосов
/ 09 сентября 2011

Я пытаюсь создать метапоиск или, в качестве альтернативы, область видимости, которая дает мне все объекты, чья ассоциация has_many не имеет типа, равного type == "Something".

Пример:

class Order < ActiveRecord::Base
  has_many :billing_base
end

class InvoiceBase < ActiveRecord::Base
  belongs_to :order
end

class Invoice < InvoiceBase
end

class OrderAcknowledgement < InvoiceBase
end

Поиск заказов, имеющих счет-фактуру, легко выполняется с помощью пользовательской области:

joins(:invoice_base).where(:invoice_base => {:type => "Invoice"})

или метапоиск:

:invoice_base_type_equals => "Invoice"

Теперь, как мне поступить наоборот, найти заказы, в которых НЕТ счета? (Подтверждение заказа всегда должно быть разрешено)

1 Ответ

0 голосов
/ 09 сентября 2011

Пытаясь выяснить это на моем компьютере, я написал SQL-оператор, включающий подзапрос.Интересно, может быть, вы можете вставить необработанный SQL в метод where.

select * from orders where orders.id not in (SELECT invoice_bases.order_id from invoice_bases);

where("orders.id not in (SELECT invoice_bases.order_id from invoice_bases)")

Я попробовал на своем сайте, и это, похоже, сработало.Обратите внимание, что я использую MySQL

...