Grails: как определить свойство предметной области, отображаемое в представлениях, но не сохраняемое?

У меня есть классы этого домена, скажем:

class Person {
  String name
  Integer age
  //car data that needs to be shown and filled in views 
  //but not persisted in Person class
  String model
  String color

  static afterInsert = {
    def car = new Car(model: model, color: color)
    car.save()
  }
}

class Car {
  String model
  String color  
}

Что мне нужно, так это показать в моих представлениях Person (create и edit) свойства модели и цвета, которые определены внутри класса Person, но они не должны сохраняться в этом классе. Эти данные, model и color, должны быть сохранены с использованием класса домена Car, возможно, с использованием события afterInsert. Другими словами, мне нужно сохранить данные из класса предметной области, используя представления из другого класса предметной области.

Заранее спасибо.


person Manuel Calles    schedule 23.07.2013    source источник


Ответы (1)


Вы можете использовать transients для свойств, которые вы хотите игнорировать GORM, для пример

class Person {

  static transients = ['model', 'color']

  String name
  Integer age
  //car data that needs to be shown and filled in views 
  //but not persisted in Person class
  String model
  String color
  ..
}

Просто любопытно, но есть ли причина, по которой вы не используете ассоциации

class Person {
  ..
  static hasMany = [cars: Car]
}

class Car {
  ..
  static belongsTo = [Person] 
  static hasMany = [drivers: Person]
}

.. или композиция

class Person {
  Car car
}

или просто привязка данных с несколькими доменами

//params passed to controller
/personCarController/save?person.name=John&age=30&car.model=honda&car.color=red

//in your controller
def person = new Person(params.person)
def car = new Car(params.car)
person ikumen    schedule 23.07.2013
comment
Спасибо за Ваш ответ. Я пробовал это, но поля модели и цвета не отображаются в представлениях. - person Manuel Calles; 24.07.2013
comment
Просто любопытно - есть ли причина, по которой вы не используете ассоциации, композицию или просто данные привязка к нескольким доменам - person ikumen; 24.07.2013
comment
Да, я думаю, что есть отношение, которое можно было бы определить, но для моей задачи это не очень нужно. Было бы здорово проверить, существует ли автомобиль, и получить его данные, возможно, используя его идентификатор, а если он не существует, создать новый автомобиль через всплывающее окно. - person Manuel Calles; 24.07.2013
comment
если вы просто хотите привязать данные к нескольким доменам, я включил пример в конце - person ikumen; 24.07.2013