Grailsで関連付けを正しく取得するのに苦労しています。2 つのドメイン クラスがあるとします。
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 フィールドで null 値の例外が発生するため、明らかにデフォルトのエンジンが作成および保存されません。エンジンを手動で作成しようとしました:
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 は関連するクラスを保存できませんか? どうすればそのような機能を実装できますか?