【问题标题】:Grails Bootstrap addTo an extended abstract classGrails Bootstrap addTo 扩展抽象类
【发布时间】:2014-08-14 15:00:42
【问题描述】:

我是 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
    }
}

用户.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 中删除“用户”字段,它可以工作,但“cd1”将不属于“用户”。如何将“cd1”添加到“用户”?我无法创建新媒体,因为它是一个抽象调用。

谢谢

【问题讨论】:

    标签: twitter-bootstrap grails grails-orm


    【解决方案1】:

    属于添加反向引用。你试过http://grails.org/doc/latest/ref/Domain%20Classes/addTo.html

    所以 user.addToMedias(cd1);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多