Im fairly new to Grails and ive run into a (probably dumb) problem. When I try to save a domain instance it fails with ... on field 'deviceUsages[0].start': rejected value [null]...
This is the action on which it fails:
def save() {
def user=params.remove('user.id')
def deviceInstance=new Device(params)
DeviceUsage du = new DeviceUsage(device: deviceInstance, user: User.get(user), start: new Date(), end: null)
if(user){
deviceInstance.addToDeviceUsages(du)
}
if (!deviceInstance.save(flush: true)) {
deviceInstance.errors.each {
println it
}
render(view: "create", model: [deviceInstance: deviceInstance])
return
}
du.save()
flash.message = message(code: 'default.created.message', args: [message(code: 'device.label', default: 'Device'), deviceInstance.id])
redirect(action: "show", id: deviceInstance.id)
}
As you can see, 'start' is clearly initialized to a new Date... The domain classes in question are following:
class Device {
String name
String description
Date created = new Date()
Date deactivated
User currentUser
static hasMany = [
deviceUsages: DeviceUsage
]
static constraints = {
name(nullable:false, blank:false)
description(nullable:false, blank:true)
created(nullable:false, display:false)
deactivated(nullable:true)
currentUser(nullable:true)
}
and
class DeviceUsage implements Serializable{
Date start
Date end
static belongsTo = [
device: Device,
user: User
]
static constraints = {
start(nullable:false)
end(nullable:true)
}
static mapping = {
id composite: ['device', 'user']
version false
}
Thanks for any help
Well I managed to solve it... Apparently new DeviceUsage(device: deviceInstance, user: User.get(user), start: new Date(), end: null)
leaves start null for whatever reason, so adding du.start = new Date()
at the next line fixed it...