Метод обновления не сохраняется в базе данных в Grails - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь написать свой собственный контроллер, который позволил бы мне обрабатывать таблицы с составными ключами в 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, получаю флэш-сообщение с информацией об успешном обновлении, URL-адрес http://localhost:8080/aliasFrequencyDict/show?_method=PUT&version=&frequency=0&unit=Q&description=abc123&lang=PL, но в самой записи базы данных ничего не меняется.Почему это так?Что здесь может быть не так?

1 Ответ

0 голосов
/ 01 марта 2019

ОК, оказалось, что проблема была проще, чем выглядела - явной записи параметров в свойства перед сохранением было достаточно, чтобы исправить это!Поэтому мы просто делаем это:

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

aliasFrequencyDict.properties = params /* <===== here! */

try {
    aliasFrequencyDict.save(insert: false, flush: true)
...

... и это работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...