Grails 保存操作的奇怪行为
我在保存域时有一个奇怪的行为,下面是域:Grails 保存操作的奇怪行为,grails,Grails,我在保存域时有一个奇怪的行为,下面是域: 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
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") }
}
以下是控制器中的保存操作:
@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 just modifying the 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 the return is always 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] }
}
}
在adsInstance.isAttached()中,我总是得到未保存的,尽管adsInstance.save flush:true在它之前被调用,我是否遗漏了什么?您遗漏了两件事:
- 修改持续时间字段后,将不再验证对象
- 如果您使用save方法添加了
,您自己就会发现问题failOnError:true
您在
持续时间
字段中添加了一个约束,该字段只能包含值[“7天”、“14天”、“30天”]
。但在开关块内部,您为其指定的日期类型值将无法通过验证。其次,根据验证,duration
字段的sql类型不应该是datetime
。您应该创建一个自定义validatior或使用一个临时字段。好的,我知道了,但是我如何做,用户可以从列表中选择“7,14,30天”,我将他的选择保存为数据库中的一个日期?添加[“7天”,“14天”,“30天”]
对瞬态字段的约束,然后从瞬态字段值中为持续时间
字段制定值。那么我如何跳过对该字段的验证?从持续时间字段中删除约束,并将其添加到新的瞬态字段中。将持续时间字段的数据类型从字符串更改为日期。我找到了跳过验证的方法,但这将跳过所有字段的验证,save(validate:false)