2012-03-29 9 views
0

Hallo Ich mache eine Anwendung mit Grails. Es ist eine Anwendung, um die Rechnungen zu verwalten. Jede Rechnung enthält eine Produktliste. Jedes Produkt kann einer von drei Typen mit unterschiedlichen Eigenschaften sein. Also habe ich das Modell fertig mitGORM Vererbung und GSP

class Invoice{ 
    static hasMany = [products: Product] 
} 

abstract class Product{ 
    static belongsTo = [invoice: Invoice] 
    abstract int getPrice() 
} 

class ProductA extends Product{ 
    //implementation of getPrice using its own properties 
} 

jetzt habe ich keine Ahnung, wie es in der APS-Sicht zu verwalten.

Ich weiß, dass Grails die Vererbung mit einer Klasse Spalte verwalten, also, wenn ich ein Formular schreibe, um das Produkt hinzuzufügen, sollte ich auch diese Klasseneingabe verwalten?

etwas wie folgt aus:

<g:textField name="products[0].class" value="ProductA" /> 

ich mit Grails ziemlich neu bin, ich weiß Frühling und mit ihm auch ich habe keine Ahnung, wie es verwalten, ist jeder Vorschlag gut. Vielen Dank.

Antwort

0

Das Produkt muss nicht zu einer Rechnung gehören. One-way hasMany Beziehung von Rechnung zu Produkt ist genug. Und Sie müssen die Basisklasse nicht haben und das Klassenmodell für Ihre Produktklasse überhaupt erweitern. Sie können ein

String productType
zu Ihrer Produktklasse hinzufügen und vielleicht eine INLIST Einschränkung hinzufügen:

static constraints = { 
    productType(inList: ['A','B','C']) 
} 

Sie ein g.select haben können Ihren Produkttyp zu definieren und wenn das Formular mit einem Produktnamen trägt, und geben Sie Sie müssen es binden oder ein neues Domänenobjekt erstellen und speichern.

+0

das Problem ist, dass für einen anderen ProduktTyp ich verschiedene Felder habe und eine andere Art, den Preis zu berechnen ... Muss ich eine große Klasse mit all diesen Feldern erstellen? – rascio

+0

Ok, dann können Sie ProductType productType anstelle der Zeichenfolge productType in Ihrer Product-Klasse verwenden. Auf diese Weise haben Sie eine Klasse namens ProductType, in der Sie eine Liste Felder oder nur Listen Felder haben können – chethan