初学者Groovy

时间:2009-11-27 20:36:48

标签: grails groovy groovy-console

我正在遵循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)

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

感谢。

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。尝试立即将整个脚本输入控制台并执行它,而不是逐行执行。