Я изо всех сил пытаюсь получить ассоциацию прямо на Grails. Допустим, у меня есть два класса домена:
class Engine {
String name
int numberOfCylinders = 4
static constraints = {
name(blank:false, nullable:false)
numberOfCylinders(range:4..8)
}
}
class Car {
int year
String brand
Engine engine = new Engine(name:"Default Engine")
static constraints = {
engine(nullable:false)
brand(blank:false, nullable:false)
year(nullable:false)
}
}
Идея заключается в том, что пользователи могут создавать автомобили без предварительного создания двигателя, и эти автомобили получают двигатель по умолчанию. В CarController у меня есть:
def save = {
def car = new Car(params)
if(!car.hasErrors() && car.save()){
flash.message = "Car saved"
redirect(action:index)
}else{
render(view:'create', model:[car:car])
}
}
При попытке сохранить я получаю исключение нулевого значения в поле Car.engine, поэтому очевидно, что механизм по умолчанию не создается и не сохраняется. Я пытался вручную создать движок:
def save = {
def car = new Car(params)
car.engine = new Engine(name: "Default Engine")
if(!car.hasErrors() && car.save()){
flash.message = "Car saved"
redirect(action:index)
}else{
render(view:'create', model:[car:car])
}
}
тоже не сработало. Разве Grails не может сохранять связанные классы? Как я мог реализовать такую функцию?