Grails Bootstrap addTo扩展抽象类

时间:2014-08-14 15:00:43

标签: twitter-bootstrap grails gorm

我是Grails的新手,我正在尝试创建这样的东西:

我有一个名为Media的抽象类,以及从Media:CD和DVD扩展的两个类。我有一个类用户,可以有0个或更多媒体(Cds或Dvds):

Media.groovy

    abstract class Media {

    String title
    String year         

    static belongsTo = [user: User]

    static constraints = {
        title blank: false
        year nullable: true         
    }

    static mapping = {
        tablePerHierarchy false
    }
}

User.groovy

class User{

    transient springSecurityService

    String username
    String password
    boolean enabled = true
    boolean accountExpired
    boolean accountLocked
    boolean passwordExpired

    static hasMany = [medias: Media]
    ...

Cd.groovy

class Cd extends Media {

    String artist

    static constraints = {
        artist blank: false
    }

    String toString() { return title}
}

在Bootstrap中我这样做:

BootStrap.groovy中

def userRole = Role.findOrSaveWhere(authority: 'ROLE_USER')
def user= User.findOrSaveWhere(username: 'user', password: '1234')

if(!user.authorities.contains(userRole)) {
    UserRole.create(user, userRole, true)
}

def cd1 = new Cd(title: "Universal", year: "2010", artist: "Borknagar", user: user).save(failOnError: true)

但是我收到了一个错误:

  

消息:验证在save()期间发生错误:    - 字段'user'上对象'org.grails.Cd'中的字段错误:被拒绝的值[null];

如果我从cd1中删除“user”字段,它可以工作但“cd1”不属于“user”。如何将“cd1”添加到“用户”?我不能创建一个新媒体,因为它是一个抽象的电话。

谢谢

1 个答案:

答案 0 :(得分:0)

属于添加后退参考。你试过http://grails.org/doc/latest/ref/Domain%20Classes/addTo.html

吗?

所以user.addToMedias(cd1);