【问题标题】:How to modify the value of the ID column (or columns) in the edit view in Grails 3?如何在 Grails 3 的编辑视图中修改 ID 列(或列)的值?
【发布时间】:2019-03-01 11:44:23
【问题描述】:

如何在 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 找不到ID 为 null 的 AliasFreuqencyDict 实例。我猜问题是,一旦你改变了这样的列之一,ID 也会改变,而且 Grails 不知道如何从对象曾经拥有的主键切换到新的主键。

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

【问题讨论】:

    标签: grails grails-orm grails-controller grails3


    【解决方案1】:

    这里(最明显的)问题是您查找要更新的内容的方式。如果您共享AliasFrequencyDict 的域模型,我可以更具体一些,但假设您有一个由FirstLast 组成的组合键以及一个[first:"John", last:"Doe"] 的实例。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多