У меня есть 3 ассоциации:
Invoice
has_many :invoice_items
has_many :items, through: :invoice_items
InvoiceItem
belongs_to :invoice
belongs_to :item
Item
has_many :invoice_items
has_many :invoices, through: :invoice_items
Я должен написать отчет, который выбирает все счета-фактуры, имеющие InvoiceItem как item_id 1 и item_id 2
Я могу сделать это только с Rubyхорошо.
invoices = Invoice.joins(:invoice_items).where(item_id: [1, 2])
invoices.each do |invoice|
if ([1,2] - invoice_items.pluck(:item_id).uniq).empty?
@real_invoices << invoice
end
end
Однако с миллионами записей это не совсем возможно.
Я пытался:
Invoice.joins(:invoice_items).having('COUNT(CASE WHEN invoice_items.item_id IN (?) THEN 1 END) = ?',[1,2], [1,2].length).group(:id)
Но это не даетправильные результаты.