отношение один-ко-многим - PullRequest
1 голос
/ 06 марта 2011

Я новичок в Граале, и мне нужна твоя помощь ..

У меня есть классы Автор и Домен:

class Author{

    static hasMany = [book:Book]

    String name
    //....
}

class Book{

    static belongsTo = [author:Author]

    String title
    //....
}

Доменные классы имеют свои контроллеры с «новым» действием, которое создает новый объект и сохраняет в db. В моем браузере при вводе ... / myApp / author / new? Name = myName & ..., в моем БД создает объект автора, но когда я ввожу ... / myApp / book / new? name = title & .. не может сохранить объект книги, возможно, потому что у меня еще нет объекта автора ...

Что я могу сделать в этой ситуации? Если кто-нибудь знает решение, пожалуйста, помогите ...

Ответы [ 3 ]

4 голосов
/ 06 марта 2011

Вам необходимо передать идентификатор автора, с которым вы хотите связать экземпляр Book. Затем вам нужно загрузить автора и связать его с книгой, которую вы хотите сохранить.

Я почти уверен, что у вас не может быть действия контроллера с именем 'new'. 'new' - это зарезервированное ключевое слово в java / groovy.

def blah = new Blah()
1 голос
/ 07 марта 2011

При определении Книги belongsTo Автор и Автор hasMany книг Книга не может быть создана без автора.Часто вы должны делать что-то вроде этого:

  • Создать автора
  • Создать книги
  • Добавить книги в автора
  • Сохранить автора -> Сохранены каскадные книгиавтоматически.

Поскольку я вижу, что вы описываете свою проблему, я думаю, что вам следует пойти медленнее и взглянуть на основы Grails GORM (Groovy Object Relation mapping), вы можете начать с примеров с помощью " Начало работы с Grails"или прочитайте пост 3 о GORM Gotchas .Они очень понятны.

0 голосов
/ 10 марта 2011

Для целей тестирования вы можете загрузить некоторые данные в загрузочную систему:

class BootStrap {
  def init = { servletContext ->
    def writer = new Author(name:"Jane")
    writer.save()
    if(writer.hasErrors()){
       println writer.errors
    }
    def comic = new Book(name: "superman", Author: writer)
    comic.save()
    if(comic.hasErrors()){
       println comic.errors
    }
  }
def destroy = {}
}

Таким образом, в вашем приложении будет автор и книга.

Также этот урок мне очень помог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...