#grails #controller #persistence
#grails #контроллер #сохранение
Вопрос:
У меня возникла самая странная проблема с контроллером в проекте Grails. Я пытаюсь выполнить простое обновление объекта домена. Вот упрощенная версия контроллера
def updateRecord = {
def foundHVT = Process.get(params.hvt)
foundHVT.summaryBy = params.summaryBy
foundHVT.catalogBy = params.catalogBy
foundHVT.editBy = params.editBy
foundHVT.produceBy = params.produceBy
foundHVT.correctedBy = params.correctedBy
// a bunch more of these
foundHVT.save(flush: true);
redirect (action:resource, id: params.hvt)
}
Если я запускаю новый экземпляр приложения и использую этот контроллер для обновления объекта, это не работает, объект не сохраняется. В контроллере это будет выглядеть нормально. Я могу, например, повторно запросить объект, и изменения будут внесены, после сохранения.
Теперь вот где это становится странным. Если я использую предустановленный контроллер редактирования каркаса и обновляю / сохраняю объект домена — а затем переключаюсь обратно на этот контроллер «updateRecord», он работает нормально, пока я не выключу сервер, на котором он работает ?!?
Я понимаю, что мне не хватает чего-то очень простого, но я не могу найти, что это такое. Любые рекомендации были бы весьма признательны.
DM
Комментарии:
1. что-то звучит не так. вы пробовали grails clean?
2. кроме того, вы получаете какие-либо исключения? вы включили ведение журнала sql?
3. да, извините, у меня это было, я просто набрасывал основы контроллера, и он вообще не сообщал об ошибках. С момента очистки проекта все работает нормально.
Ответ №1:
Как отметил HVGOTCODES, Grails Clean, похоже, исправил все странности, происходившие с этим контроллером.
Ответ №2:
попробуйте установить «def scaffold = true» в свой контроллер, если у него еще нет обычных точек входа.
Ответ №3:
Вероятно, строительные леса save
заполняют какое-то поле, которого у вас нет.
Возможные проблемы:
-
Проверьте
save()
результат и визуализируйтеfoundHVT.errors
так, как это делает Grails. ДобавьтеfailOnError: true
параметр вsave()
или просто проверьтеfoundHVT.hasErrors()
. ПосмотритеfoundHVT.errors.allErrors
на наличие проблем с проверкой. -
Почему нет
foundHVT.properties = params
? -
Чего там нет
foundHVT
?