如何在Grails 3的编辑视图中修改ID列(或多列)的值?

问题描述 投票:0回答:1

如何在Grails 3中允许在运行时修改ID列的值?就我而言,我有一个包含三列复合主键的表。我手动指定它们出现在编辑视图中,我的update()方法代码如下所示:

@Transactional
def update(AliasFrequencyDict aliasFrequencyDict) {

    aliasFrequencyDict = AliasFrequencyDict.get( new AliasFrequencyDict(params) )

    if (aliasFrequencyDict == null) {
        notFound()
        return
    }

    aliasFrequencyDict.properties = params

    try {
        aliasFrequencyDict.save(insert: false, flush: 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] }
    }
}

...当我进入编辑视图并编辑属性不是密钥的一部分时,它会正确保存但是只要我更改其中一个,我就会收到一条消息,说明Grails无法找到AliasFreuqencyDict实例ID null。我想问题是,一旦你更改了其中一个列,ID也会改变,Grails不知道如何从对象使用的主键切换到新的。

我应该如何修改控制器以允许编辑部分键列呢?

grails gorm grails-controller grails3
1个回答
0
投票

这里(最明显的)问题是你正在查找你想要更新的那个。如果您分享AliasFrequencyDict的域模型,我可以更具体,但是说你有FirstLast的复合键以及[first:"John", last:"Doe"]的实例。

现在你更新它以设置first=Jane并按更新...你正在为“Jane Doe”创建一个新的AliasFrequencyDict并在查找.get()中使用它,当然那不会返回AliasFrequencyDict的实例。如果要更改PK字段的值,则需要传入旧值以查找对象,然后相应地设置新值。

© www.soinside.com 2019 - 2024. All rights reserved.