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: true save 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

Popular posts from this blog

how to insert data php javascript mysql with multiple array session 2 -

multithreading - Exception in Application constructor -

windows - CertCreateCertificateContext returns CRYPT_E_ASN1_BADTAG / 8009310b -