更新方法不会保存到Grails中的数据库



我正在尝试编写一个自定义控制器,该自定义控制器可以让我用Grails 3.3.8中的复合键处理表。我拥有的一个表格称为 AliasFrequencyDict,所以我在控制器中创建了这样的方法:

@Transactional
def update(AliasFrequencyDict aliasFrequencyDict) {
    aliasFrequencyDict = AliasFrequencyDict.get( new AliasFrequencyDict(params) )
    if (aliasFrequencyDict == null) {
        notFound()
        return
    }
    try {
        aliasFrequencyDict.save(insert: false, flush: true, failOnError: true)
    } catch (ValidationException e) {
        respond aliasFrequencyDict.errors, view:'edit'
        return
    }
    request.withFormat {
        form multipartForm {
            flash.message = message(code: 'default.updated.message', args: [message(code: 'aliasFrequencyDict.label', default: 'AliasFrequencyDict'), aliasFrequencyDict.getPK()])
            redirect(action: 'show', params: params)
        }
        '*'{ respond aliasFrequencyDict, [status: OK] }
    }
}

这似乎应该有效 - 当我在编辑视图中更改某些内容并提交时,我将正确地重定向到show操作时,我会收到有关成功更新的flash消息,url是 http://localhost:8080/aliasFrequencyDict/show?_method=PUT&version=&frequency=0&unit=Q&description=abc123&lang=PL,但没有任何更改数据库本身中的记录。为什么会这样?这里可能错了?

好的,事实证明,这个问题比看起来要简单 - 在保存之前明确编写访问属性的参数足以修复它!所以我们只是这样做:

...
if (aliasFrequencyDict == null) {
            notFound()
            return
        }
aliasFrequencyDict.properties = params /* <===== here! */
try {
    aliasFrequencyDict.save(insert: false, flush: true)
...

...它有效!

相关内容

  • 没有找到相关文章

最新更新