我正在遵循Graeme Keith Rocher的“Grails权威指南”中的代码示例,并遇到了一个相当不同寻常的绊脚石。
基本上,存在2个域类 - Bookmark&标签
书签:
class Bookmark {
static hasMany = [tags:Tag]
URL url
String title
String notes
Date dateCreated = new Date()
}
代码:
class Tag{
static belongsTo= Bookmark
Bookmark bookmark
String name
}
我被指示启动Grails控制台(这与groovy控制台相同)并创建一个新对象,如下所示。
def b = new Bookmark(url: new URL('http://grails.org/'), title:'Grails', notes:'Groovy')
这导致:
Result: Bookmark : null
根据该书,GORM自动提供addTag方法的实现。所以我编码......
b.addTag( new Tag(name: 'grails'))
只是为了得到错误信息:
Exception thrown: No such property: b for class: ConsoleScript1
groovy.lang.MissingPropertyException: No such property: b for class: ConsoleScript1 at ConsoleScript1.run(ConsoleScript1:2)
作者在书中没有说明这一点。我想知道是否有人可以帮助我?
感谢。
答案 0 :(得分:3)
你在读这本书的第一版吗?如果是这样,它已经过时了。自0.5以来,add *方法已被弃用。它被addTo *取代,所以改为:
b.addToTags( new Tag(name: 'grails'))
假设你的代码示例不应该定义两次Bookmarks(复制和粘贴错误?),Tag可能如下所示:
class Tag {
String name
}
答案 1 :(得分:2)
groovy控制台与grails控制台不同。要访问grails控制台,在应用程序目录中键入grails console
- 您应该获得一个Java GUI应用程序。该示例可能会起作用,因为Grails会向标准Groovy添加一些内容。
此外,您的问题不是addTag方法,而是您定义的无法找到的项b
。尝试立即将整个脚本输入控制台并执行它,而不是逐行执行。