我正在努力在 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 不能保存关联的类吗?我怎样才能实现这样的功能?