2016-03-15 44 views
0

美好的一天。我是Grails的新手,我不得不设计一款音乐购物型应用程序。我有一个购物车域和一个用户域,我正在尝试做的是当我创建一个新的用户对象时,我想创建一个新的Cart对象,并链接到用户中的所述用户对象。我使用静态脚手架,所以我想在用户/保存操作中执行此操作。这里是我的代码:将购物车对象链接到用户对象的grails

class Cart { 
    String item 
    Integer quantity 
    BigDecimal price 
    String type 
    Integer typeId 
    User user 
    static constraints = { 
     type nullable:false, blank:false, inList:["Album", "Song", "Empty"] 
     typeId nullable:false, blank:false 
    } 
} 

class User { 
    String username 
    String password 
    String fName 
    String lName 
    String email 
    static constraints = { 
     username(nullable : false, blank : false, minSize : 1) 
     password(nullable : false, blank : false, minSize : 1) 
     fName(nullable : false, blank : false, minSize : 1) 
     lName(nullable : false, blank : false, minSize : 1) 
     email(nullable : false, blank : false, email : true) 
    } 
} 

class UserController { 
    //static scaffolded code (index, show, create, etc.) 
    @Transactional 
    def save(User userInstance){  //This whole method is also generated with scaffolding 
     if (userInstance == null) { 
      notFound() 
      return 
     } 

     if (userInstance.hasErrors()) { 
      respond userInstance.errors, view: 'create' 
      return 
     } 

     userInstance.save flush: true 

     //This is what I've been trying to do but it doesn't work and I don't know why :(
     def myCart = new Cart(user:userInstance, item:'empty item', quantity:0, price:0, total:0, type:'Empty', typeId:0).save(flush:true) 

     //Rest of the generated code 
    } 
    //More generated code 
} 

任何帮助,将不胜感激。谢谢!

回答

0

你在购物车类有2个错误。 第一:更新TYPEID到TYPEID 二:类型应该是字符串,而不是BigDecimal的

+0

谢谢,我修好了。 – PrintlnParams

0

我觉得这link如何做Grails的级联很好地解释了。

级联确定何种类型的操作应用于域实例时也适用于该实例的关系。

根据级联的方式,我认为在User类中有一个Cart对象,并使用belongsTo让Grails知道该Cart是用User保存或删除的。