Проблема с проверкой Grails на многодоменную связь? - PullRequest
0 голосов
/ 22 октября 2010

Мне нужно проверить действие сохранения между 3 доменами, вот отношения:

Пользователь - JobProcess: один ко многим, JobProcess - Тепловая карта: один ко многим.

User { static hasMany = [ jobs : JobProcess ] ... }
JobProcess { static hasMany = [ heatmaps : Heatmap ] ... User script ... }
Heatmap { static belongsTo = JobProcess ... JobProcess job ... }

Я использую исключения для управления потоком проверки, вот мой класс проверки:

class ValidationException extends RuntimeException {
  Object invalidObject
  ValidationException(String message, Object invalidObject) {
    super(message)
    this.invalidObject = invalidObject
  }
}

Я также строю класс обслуживания для абстрагирования операций Heatmap (и привязки данных params к объекту):

  def addJob(params) {

    def user = User.findById(params.user_id)

    if (user) {

    def heatmap = new Heatmap(params)

    def process = new JobProcess(params)

        process.addToHeatmaps(heatmap)
        user.addToJobs(process)

    if (user.save()) {
      return heatmap
    } else {
       throw new ValidationException("Invalid form", heatmap )
      }
    }
 }

И мой контроллер:

  try {
    def heatmap= HeatmapService.addJob(params)
      flash.message = "Running new process : $heatmap.job}"
      redirect(uri:'/')
  } catch (ValidationException che) {
    flash.message = "Validation Failed ${che.message}"
    render(view:'create', model:[heatmap:che.invalidObject])
  }

Моя первая проблема : У меня нет проверки ошибок с помощью: user.save () - почему не выполняется проверка?
Я могу решить эту проблему, покупая обновление if (user.save ()) с помощью: if (heatmap.validate () && user.save ()).
Есть ли лучший способ продолжить?

Моя вторая проблема : мое перенаправление не вызывает исключение недопустимой публикации.
Я перенаправлен в свое представление создания, но все мои поля пусты (я потерял информацию обо всех полях) и нет ошибок проверки.
Тем не менее, я использую модель: [heatmap: che.invalidObject].
За исключением того, что явозвращаю invalidObject, поэтому мое представление создания должно отображать точные ошибки проверки?Что не так?

Спасибо

1 Ответ

0 голосов
/ 22 октября 2010

Я нахожу свою проблему, это из-за моего представления GSP, я использовал неправильный компонент:

<td valign="top" class="value ${hasErrors(bean: heatmapInstance, field: 'project_name', 'errors')}">

Итак, я обновился до heatmap, и теперь я получаю подтверждение ошибки:

<td valign="top" class="value ${hasErrors(bean: heatmap, field: 'project_name', 'errors')}">

Спасибо, Виктор.

...