Невозможно сохранить объекты домена, пока не будет использован каркас CRUD

#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 заполняют какое-то поле, которого у вас нет.

Возможные проблемы:

  1. Проверьте save() результат и визуализируйте foundHVT.errors так, как это делает Grails. Добавьте failOnError: true параметр в save() или просто проверьте foundHVT.hasErrors() . Посмотрите foundHVT.errors.allErrors на наличие проблем с проверкой.

  2. Почему нет foundHVT.properties = params ?

  3. Чего там нет foundHVT ?