robert
robert

Reputation: 247

Grails databinding doubt

   Class Carro {
String name
String marca
String matricula

} 

Class CarroMovel{

String pro1
String prop2
String prop3

Carro carro

static hasMany = [ carros: Carro]

}

 def save2 = {

                def carroInstance = new Carro()
                def carroMovelInstance = new CarroMovel()

                carroInstance.name = params.name
                carroInstance.marca = params.marca
                carroInstance.matricula = params.matricula

                carroMovelInstance.prop1 = params.carroMovel.prop1
                carroMovelInstance.prop2 = params.carroMovel.prop2
                carroMovelInstance.prop3 = params.carroMovel.prop3

                carroInstance.save()
                carroMovelInstance.carro = carroInstance
                carroMovelInstance.save()                 

            }

The CarroInstance is saving, but the carroMovelInstance isn't. I cannot figure it out. Any help would be apreciated.

Upvotes: 0

Views: 175

Answers (2)

Rob Hruska
Rob Hruska

Reputation: 120286

Grooveek is correct in that you haven't ever invoked carroMovelInstance.save().

However, it might be simpler for you to simply take advantage of Grails' databinding, instead of unnecessarily creating the associations and manually binding the parameters.

// Update your Carro domain.
def Carro {
    String name
    String marca
    String matricula

    // will cause persistence operations to cascade from CarroMovel to Carro
    static belongsTo = CarroMovel
}

// Update your save2 action.
// By passing 'params' to the CarroMovel constructor, Grails will bind request
// parameters to domain properties of the same name; it even works with associations!
def save2 = {
    def carroMovelInstance = new CarroMovel(params)
    if(carroMovelInstance.validate) {
        carroMovelInstance.save()
    }
}

Read up on Grails Data Binding, particularly the parts about associations. Additionally, read "Understanding Cascading Updates and Deletes" to understand how a call to save() on a parent domain object will (or will not) cascade to an associated domain object.

Upvotes: 1

Grooveek
Grooveek

Reputation: 10094

you never ask for the carroMovelInstance to save... The carro instance has nor reference to carroMovel instance so there is no cascading of saving

Upvotes: 1

Related Questions