2017-12-27 4 views
0

Ich habe eine Web-App in Schienen 4 mit grundlegenden Warenkorb, die den Namen des Produkts, Menge und Preis zeigt, und darin liegt mein Problem. Der Preis kommt von den Kosten seiner Materialien, und da Produkte viele Materialien und Materialien haben können, die auf vielen Produkten verwendet werden können, machte ich eine Tabelle, die product_cost genannt wurde. Ich habe kein kalkuliertes Preisfeld, weil sich die Materialpreise jederzeit ändern können und folglich auch der Produktpreis, also dachte ich, es wäre nicht produktiv.Wie zeige ich die Summe der Materialpreise für jedes Produkt in einem Einkaufswagen in Rails 4 an?

Zurück zum Warenkorb, ich muss den Preis für jedes Produkt darauf zeigen, und dafür die Kosten aller Materialien für dieses Produkt berechnen.

Heres eine einfache Darstellung der Struktur:

Material Table 
     Name 
     Unit cost 

    Product Cost Table 
     Product ID 
     Material ID 
     Quantity of material 

    Product Table 
     Name 
     Description 

Wie nähern ich diese Situation?

Antwort

1

Offensichtlich ist es eine many-to-many Beziehung, so dass ich erwarte, dass Ihre Modelle (Material, ProductCost, Produkt) mit has_many_through implementiert, ich has_many_through Weg wählen, weil Sie etwas in der Lage, wie

p = Product.find(1) 
product_cost_records = p.product_cost # retrieve array of active-records of the bridge table between product and material 
product_cost_records.map do |record| 
    record.material.unit * record.quantity # (record.material) gets Material record associated to this bridge record 
end.reduce(:+) # map will put the multiplication of (quantity * Unit) into an array then reduce will sum them up 

Ich weiß, zu tun Es scheint, als ob viele Fragen ausgeführt werden, aber das ist die schnellste Lösung, die ich bekam, Bitte beachten Sie, dass ich oben Code auf einer Vorlage-Anwendung nicht versucht oder etwas, ich rate nur Beziehungen in Ihrer App, hoffe das hilft Ihnen .

+0

Frage, nach dem end.reduce (: +), wie kann ich auf das Ergebnis zugreifen? – onildo

+0

Ich beantworte nur meine eigene Frage, habe eine Hilfsmethode auf meinem Controller erstellt, den Code, den Sie eingegeben haben, und es gibt die Summe an die Methode zurück, die sie wiederum dorthin zurückbringt, wo ich sie in der Ansicht brauche. Danke für die Hilfe man = D – onildo

+0

Sorry für meine späte Antwort und Sie sind herzlich willkommen: D @onildo –

Verwandte Themen