У меня есть две модели:Rails ActiveRecord запроса
class Invoice < ActiveRecord::Base
has_many :payments_received
end
class PaymentReceived < ActiveRecord::Base
belongs_to :invoice
end
Мне нужно написать запрос, чтобы найти счета-фактуры, которые имеют либо нет payments_received или сумма payments_received.amount не меньше, чем invoice.amount
я могу найти счета-фактуры с не payments_received:
@invoices = Invoice.includes(:payments_received).where(:payments_received => { :invoice_id => nil })
Но мне нужно найти счета-фактуры, где сумма всех связанных payments_received меньше invoice.amo ЕНТ.
Это метод класса, который выполняет то, что мне нужно, но я хотел бы сделать это, не вытаскивая все счета из базы данных и повторяя их через каждый из них.
def self.unpaid
unpaid_invoices = []
total_payments = 0
invoices = Invoice.all
invoices.each do |invoice|
if invoice.payments_received.empty?
unpaid_invoices << invoice
else
invoice.payments_received.each do |payment_received|
total_payments += payment_received.amount
end
if total_payments < invoice.amount
unpaid_invoices << invoice
end
end
end
unpaid_invoices
end
Мне нравится этот код @Ahsan ЭЛЛАХИ, но я искал способ, чтобы достичь этого, не вытягивая все счета-фактур из базы данных и перебора каждого из них. – brainburn