2016-12-15 5 views
1

Ich muss mit anderen Objekt in meiner Ruby on Rails-Anwendung zusammenführen. Ich habe meine Rechnung Objekt:Ruby, verschmelzen zwei verschiedene Objekte

class Invoice < ActiveRecord::Base { 
          :id => :integer, 
         :user_id => :integer, 
        :description => :text, 
          ...... 
         :status => :string, 
         :price => :float 
} 

Und meine Zahlung Objekt:

class Payment < ActiveRecord::Base { 
      :id => :integer, 
     :token => :string, 
    :invoice_id => :integer, 
    :created_at => :datetime, 
    :updated_at => :datetime, 
     :email => :string 
} 

mit 1 bis Beziehung zwischen ihnen:

class Invoice < ActiveRecord::Base 
    has_many :payments 

class Payment < ActiveRecord::Base 
    belongs_to :invoice 

was Nun würde ich tun möchte, ist zurück das Rechnungsobjekt und das Feld: email und: created_at des zugeordneten Zahlungsobjekts. Gerade jetzt kehre ich das zwei Objekt mit der Zip-Funktion:

:invoices => (user.invoices.where(:hide => false).zip user.invoices.map{|x| x.payments.last}), 

aber, dass eine Reihe von Array zurück:

[ 
    [{invoice},{payment}], 
    [{invoice},{payment}], 
    ... 
] 

Was ich will zurückkehren ist so etwas wie:

[ 
    {invoice, :email_payment, :created_at_payment}, 
    {invoice_1, :email_payment, :created_at_payment}, 
    ... 
] 

Wie kann ich das machen?

+1

Könnten Sie nicht schaffen 'email_payment' und' created_at_payment' Methoden in Ihrem 'Invoice' Klasse und verwenden Sie nur 'Rechnungs'-Objekt? – Magnuss

+0

Ja, aber aus logischer Sicht macht das nicht viel Sinn, ich hoffte, dass es eine bessere Lösung geben würde! – ste

Antwort

2

würde ich email_payment und created_at_payment als Methoden zum Rechnungsmodell hinzufügen, aber Sie können sie mit folgendem erreichen:

user.invoices.where(hide: false).map do |invoice| 
    invoice.attributes.merge({ 
    email_payment: invoice.payments.last.email, 
    created_at_payment: invoice.payments.last.created_at 
    }) 
end 
+0

Das ist perfekt, genau das, was ich wollte! – ste

Verwandte Themen