monda
monda

Reputation: 3915

How to save associated object in Grails?

I am a grails beginner.

i have a 2domain class

class Employee {
        String name
        String department
    static constraints = {
    }
    public String toString() {
        name
    }
}



class Address {
    String line1
    String line2
    Employee employee

    static belongsTo = Employee

    static constraints = {
    }
}

where Address belongs to Employee .. so i have given belongsTo association.

My Employee/create.gsp page takes input for fields specified in Employee and Address.

so on creation of employee , address must be get save automatically .

so what could be the save action in EmployeeController

i have tried some thing like this but did not work.

def save = {
    def employeeInstance = new Employee(params)
    def addressInstance = new Address(params)
    if (employeeInstance.save(flush: true)) {
        flash.message = "${message(code: 'default.created.message', args: [message(code: 'employee.label', default: 'Employee'), employeeInstance.id])}"
        redirect(action: "show", id: employeeInstance.id)
    }
    else {
        render(view: "create", model: [employeeInstance: employeeInstance])
    }
}  

how to save this associated model ?

Upvotes: 3

Views: 1603

Answers (1)

aiolos
aiolos

Reputation: 4697

Here you have a one-to-one relationsip - add an address property to the Employee class.

class Employee {
    String name
    String department
    Address address

    public String toString() {
        name
    }
}

Change your belongsTo of the Address like this:

class Address {
    String line1
    String line2

    static belongsTo = [employee: Employee]
}

Now you could create an Employee like this:

def employeeInstance = new Employee(params)
employeeInstance.address = new Address(params)
if (employeeInstance.save(flush: true)) {
    // your logic
}

Read the docs (one-to-one relationship) for further informations.

Upvotes: 5

Related Questions