Новичок Groovy - PullRequest
       46

Новичок Groovy

0 голосов
/ 27 ноября 2009

Я слежу за примерами кода в «Полном руководстве по Grails» Грэма Кита Роше и наткнулся на довольно необычный камень преткновения.

По сути, существует 2 класса домена - Bookmark & ​​Tag.

Закладка:

class Bookmark {
static hasMany = [tags:Tag]

URL url
String title
String notes
Date dateCreated = new Date()

}

Tag:

class Tag{
static belongsTo= Bookmark

Bookmark bookmark
String name

}

Я получил указание запустить консоль Grails (это то же самое, что и Groovy Console) и создать новый объект следующим образом.

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 ]

3 голосов
/ 28 ноября 2009

Вы читаете 1-е издание книги? Если так, то это довольно устарело. Методы add * устарели с версии 0.5. Он был заменен на addTo *, поэтому сделайте это вместо:

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

Предполагается, что в вашем примере кода не должно быть двухкратного определения закладок (ошибка копирования и вставки?), И тег может выглядеть так:

class Tag {
    String name
}
2 голосов
/ 28 ноября 2009

Groovy консоль отличается от консоли Grails. Чтобы получить доступ к консоли Grails, введите grails console в каталоге вашего приложения - вы должны получить приложение с графическим интерфейсом Java. Вполне возможно, что пример сработает, потому что Grails добавляет некоторые вещи в стандартный Groovy.

Кроме того, ваша проблема не в методе addTag, а в элементе b, который вы определили и не можете найти. Попробуйте ввести весь скрипт в консоль сразу и выполнить его, вместо того, чтобы выполнять его построчно.

...