Je me bats pour obtenir une association juste sur Grails. Disons que j'ai deux classes de domaine:Sauvegarder les classes de domaine associées dans 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)
}
}
L'idée est que les utilisateurs peuvent créer des voitures sans créer un moteur, et les voitures sont un moteur par défaut. Dans le CarController je:
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])
}
}
Lorsque vous essayez de sauver, je reçois une exception valeur nulle sur le champ Car.engine, donc évidemment le moteur par défaut n'est pas créé et enregistré. J'ai essayé de créer manuellement le moteur:
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])
}
}
Ne fonctionne pas non plus. Grails n'est-il pas capable de sauvegarder les classes associées? Comment pourrais-je mettre en place une telle fonctionnalité?
Pourriez-vous attribuer la valeur par défaut à travers la classe de domaine ??? Je pense à l'initialisation comme vous l'avez fait ci-dessus, mais peut-être pas à travers le contrôleur. – bsr