Verschieben einer Methode in meinem Controller (Invoices
) in das entsprechende Modell und ich vermisse etwas. Ich habe versucht, folgende this und this und sogar this und es gibt kleine Probleme, die ich habe, dass ich zusätzliche Augen brauchen.Moving-Methode-Logik mit SQL zu modellieren in Schienen Projekt
Meine Arbeits-Controller-Methode ist dies.
def array_of_disbursable_invoices
sql = "SELECT MIN(departure_date), ch_invoice.invoice_id
FROM ch_invoice
INNER JOIN ch_trip
ON ch_invoice.invoice_id = ch_trip.invoice_id
WHERE departure_date <= (SELECT SYS_EXTRACT_UTC(SYSTIMESTAMP)FROM DUAL)
AND service_rendered = 0
AND paid = 1
Group By ch_invoice.invoice_id"
report = ActiveRecord::Base.connection.exec_query(sql)
render json: report
end
Und ich versuche, es in das zu verwandeln.
def array_of_disbursable_invoices
report = report.array_of_disbursable_invoices
render json: report
end
Mit der Logik in meinem Modell hier.
def array_of_disbursable_invoices
sql = "SELECT MIN(departure_date), ch_invoice.invoice_id
FROM ch_invoice
INNER JOIN ch_trip
ON ch_invoice.invoice_id = ch_trip.invoice_id
WHERE departure_date <= (SELECT SYS_EXTRACT_UTC(SYSTIMESTAMP)FROM DUAL)
AND service_rendered = 0
AND paid = 1
Group By ch_invoice.invoice_id"
ActiveRecord::Base.connection.exec_query(sql)
end
Aktuelle Fehlermeldung
nicht definierte Methode `array_of_disbursable_invoices' für nil: NilClass
Ich werde wahrscheinlich mit dieser Antwort gehen. Du erklärst es besser als ich und es wird wahrscheinlich für die Nachwelt hilfreicher sein. Was die SQL vs ActiveRecord betrifft, so denke ich, dass meine Teamleitung nur möchte, dass ich besser verstehe, was ActiveRecord für mich tut, indem ich gezwungen werde, zuerst SQL zu erstellen. Kann das auch umgestalten. Gibt es noch andere Gründe, die erste gegenüber der letzteren zu bevorzugen? – CheeseFry
Als ich Ihren Beitrag zum ersten Mal gelesen habe, dachte ich, dass es einen Grund geben könnte, warum Sie den Ansatz "report.array_of_disbursable_invoices" verwendet haben (vielleicht war da irgendwo ein 'Report'-Objekt). Ich sehe aus, als ob das nicht der Fall ist, also denke ich, dass eine Klassenmethode sauber ist. Wenn Sie zum Refactor gehen (wenn Sie sich dazu entschließen), möchten Sie vielleicht lieber einen Scope als eine Klassenmethode verwenden. Es gibt gute Beiträge zu den Vor- und Nachteilen. – jvillian