0

我正在关注 Graeme Keith Rocher 的“Grails 权威指南”中的代码示例,但遇到了一个相当不寻常的绊脚石。

本质上,存在 2 个域类 - 书签和标签。

书签:

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)

作者在书中没有说明这一点。我想知道是否有人可以帮助我?

谢谢。

4

2 回答 2

3

你在看这本书的第一版吗?如果是这样,那就太陈旧了。add* 方法自 0.5 起已被弃用。它被替换为 addTo* 所以这样做:

b.addToTags( new Tag(name: 'grails'))

假设您的代码示例不应两次定义书签(复制和粘贴错误?)并且标签可能如下所示:

class Tag {
    String name
}
于 2009-11-28T04:43:20.903 回答
2

groovy 控制台与 grails 控制台不同。要访问 grails 控制台,请输入grails console您的应用程序目录 - 您应该会获得一个 Java GUI 应用程序。该示例可能会在那时起作用,因为 grails 在标准 Groovy 中添加了一些东西。

另外,您的问题不是 addTag 方法,而是b您定义的无法找到的项目。尝试一次将整个脚本输入控制台并执行它,而不是逐行执行。

于 2009-11-27T21:02:56.283 回答