grails - strange behavior for save action -
i have strange behavior domain saving , here domain:
class ads { string adtitle string addetails string duration date datecreated static belongsto = [user:users] static constraints = { category (nullable:false) adtitle (nullable:false, maxsize:100 ) addetails(nullable:false, maxsize:500 ) duration (inlist:["7 days", "14 days", "30 days"],nullable:true) } static mapping ={ duration (sqltype:"datetime") } } here save action in controller:
@transactional def save(ads adsinstance) { if (adsinstance == null) { notfound() return } if (adsinstance.haserrors()) { respond adsinstance.errors, view:'create' return } adsinstance.user=users.get(springsecurityservice.currentuserid) def adcreationdate = new date() switch (adsinstance.duration) {//here i'm modifying duration case "7 days": adsinstance.duration=adcreationdate+7 break case "14 days": adsinstance.duration=adcreationdate+14 break case "30 days": adsinstance.duration=adcreationdate+30 break default: adsinstance.duration=adcreationdate+7 } adsinstance.save flush:true if (adsinstance.isattached()) //here return not saved { println "saved" } else { println " not saved" } request.withformat { form multipartform { flash.message = message(code: 'default.created.message', args: [ message(code: 'ads.label', default: 'ads'), adsinstance.id ]) // redirect adsinstance redirect action:'show' ,id:adsinstance.id } '*' { respond adsinstance, [status: created] } } } in adsinstance.isattached() getting not saved although adsinstance.save flush:true called before , missing ?
you missing 2 things:
- after modifying duration field, not validating object again.
- you have identified issue if had added
failonerror: truesave method.
you have added constraint on duration field can contain values ["7 days", "14 days", "30 days"] only. inside switch block assigning date type values won't pass validation. secondly, according validation, sql type duration field should not datetime. should either create custom validatior or use transient field.
Comments
Post a Comment