I have a simple problem. I need to manage a hasMany collection on a domain object. I thought I was doing it correct, but it didn't work. I found another post but it is very dated and does not work (Handling parameters from dynamic form for one-to-many relationships in grails)
class User{
static hasMany = ['prefs': Preference]
}
class Preference{
Boolean email
Boolean site
Date dateCreated
Date lastUpdated
}
GSP
<g:each var="t" in="${user.prefs}" status="idx">
<li>
<input type='hidden' name="prefs[${idx}].id" value="${t.id}"/>
Email: <g:checkBox name="prefs[${idx}].email" value="${t.email}" />
Site: <g:checkBox name="prefs[${idx}].site" value="${t.site}" /><
</li>
</g:each>
Controller:
log.info(user.prefs)
user.properties = params
if(!user.save()){ ... }
It then errors out:
UserController - [Preference : 3, Preference : 4]
Error 2013-06-04 21:54:41,405 [http-bio-8080-exec-12] ERROR errors.GrailsExceptionResolver
IndexOutOfBoundsException occurred when processing request: [POST] /user/prefs - parameters: prefs[0].email:
id: 2
prefs[1].site: on
prefs[0].email: on
_prefs[1].site:
_prefs[1].email:
prefs[1].id: 3
_prefs[0].site:
prefs[0].site: on
prefs[0].id: 4
Index: 1, Size: 1. Stacktrace follows:
Message: Index: 1, Size: 1