Grails控制器添加实例

Grails控制器添加实例,grails,controller,dns,show,add,Grails,Controller,Dns,Show,Add,好吧,我以前问过一个问题,但不是很确定。所以我继续往前走,一直等到现在再问 主要问题 如何通过控制器添加域的新实例?我创建了一个名为gather的函数来读取包含数据的文件,然后创建一本包含特定信息的新书,但是它根本没有将其添加到数据库中 我目前有一个控制器(bookController)和它的域 我的领域很简单: class Book { static belongsTo = Author String toString() { bookNumber } Autho

好吧,我以前问过一个问题,但不是很确定。所以我继续往前走,一直等到现在再问

主要问题

如何通过控制器添加域的新实例?我创建了一个名为gather的函数来读取包含数据的文件,然后创建一本包含特定信息的新书,但是它根本没有将其添加到数据库中

我目前有一个控制器(bookController)和它的域

我的领域很简单:

class Book {

    static belongsTo = Author

    String toString() { bookNumber }

    Author bookAuthor
    String title


    static constraints = {
        bookAuthor()
        title()

    }
}
我只是“生成”了我的视图,所以我有了基本的创建、编辑、列表和显示功能。我继续在名为gather的控制器中添加了我自己的。对于gsp,我只是复制了'list.gsp',因为我只希望用户在完成收集功能后查看图书列表

以下是我的控制器的外观(只是基本生成的一个加上聚集):

普惠制出现了,但由于某种原因,我的新书没有添加。当我在中添加println以测试信息是否在列表中时,它会显示具有正确信息的打印。所以我不明白为什么不“创建”新书实例并将其添加到数据库中

有什么建议吗

编辑

作者的域类:

class Author {

    static hasMany = [books:Book]

    String authorName
    String notes

    String toString() { authorName }


    static constraints = {
        machineName()
        notes(maxSize:500)
    }
}

我建议您为控制器和/或域对象编写一些单元测试。使用此代码无法成功创建对象

新书(作者:$abc.Author),书名:$abc.Title)

这里的return语句也没有意义

    numberOfBooks.times {
    def bookInstance = new Book(Author:"$abc.author", Title:"$abc.title")
        return [bookInstance: bookInstance]
    }
看起来您在不了解代码的作用的情况下剪切和粘贴了代码。我想你想要更像这样的东西

    // iterate through the list of books and create the object array to pass back
    def bookListInstance = []
    w.bookList.each {
        def bookInstance = new Book(Author:it.author, Title:it.title)
        bookListInstance << bookInstance
    }
    // now return the list of domain objects
    return [bookInstance: bookListInstance]
//遍历书籍列表并创建要传回的对象数组
def bookListInstance=[]
w、 书单{
def bookInstance=新书(作者:it.Author,标题:it.Title)

bookListInstance我建议您为控制器和/或域对象编写一些单元测试。使用此代码无法成功创建对象

新书(作者:$abc.Author),书名:$abc.Title)

这里的return语句也没有意义

    numberOfBooks.times {
    def bookInstance = new Book(Author:"$abc.author", Title:"$abc.title")
        return [bookInstance: bookInstance]
    }
看起来您在不了解代码的情况下剪切和粘贴了代码。我认为您需要更像这样的东西

    // iterate through the list of books and create the object array to pass back
    def bookListInstance = []
    w.bookList.each {
        def bookInstance = new Book(Author:it.author, Title:it.title)
        bookListInstance << bookInstance
    }
    // now return the list of domain objects
    return [bookInstance: bookListInstance]
//遍历书籍列表并创建要传回的对象数组
def bookListInstance=[]
w、 书单{
def bookInstance=新书(作者:it.Author,标题:it.Title)

bookListInstance您没有对任何书籍实例调用.save()。

您没有对任何书籍实例调用.save()。

我继续并更改了收集操作,以复制您对我的_athor=new Author($abc.Author)所做的上述操作它仍然没有添加它们。它实际上仍然生成与以前相同的信息。而且,为什么您希望在保存操作中看到这些信息?(我只是让它生成)我说了一些“像”!,您在这里没有提供足够的代码来提供完整的解决方案…您没有显示Author对象的外观?您没有显示异常是什么,如果有的话?没有异常。我将发布Author对象的外观。很抱歉,Aaron,我以前没有处理生成的视图,我正在考虑做一些事情这与我读过的教程非常相似。我不是在质疑你的工作,只是想知道你为什么会这样做:)起初我创建了grails应用程序,但根本没有db,现在我想实现它,遇到了上面的情况。在原始问题中发布author对象return语句就是这样我在“创建”操作中看到了。我认为如果我使用的gsp具有相同的代码,这是必需的。我没有幸执行类似于您编辑的代码的操作。我在bookInstance和bookListInstance上尝试了println,但都为空:/n我只想让数据库使用从文件中提取的数据更新表当使用聚集操作时。也许有另一种/更简单的方法可以做到这一点?谢谢你的帮助Aaron。我相信我已经解决了这个问题。我还想感谢你花时间整理示例代码,因为它帮助我理解了更多的事情。我继续并更改了我的聚集操作,以复制你在m上所做的事情y_athor=new Author($abc.Author),但它仍然没有添加它们。它实际上仍然生成了与以前相同的信息。另外,为什么您希望在保存操作中看到这些信息?(我只是让它生成)我说了一些“像”!,您在这里没有提供足够的代码来提供完整的解决方案…您没有显示Author对象的外观?您没有显示异常是什么,如果有的话?没有异常。我将发布Author对象的外观。很抱歉,Aaron,我以前没有处理生成的视图,我正在考虑做一些事情这与我读过的教程非常相似。我不是在质疑你的工作,只是想知道你为什么会这样做:)起初我创建了grails应用程序,但根本没有db,现在我想实现它,遇到了上面的情况。在原始问题中发布author对象return语句就是这样我在“创建”操作中看到了。我认为如果我使用的gsp具有相同的代码,这是必需的。我没有幸执行类似于您编辑的代码的操作。我在bookInstance和bookListInstance上尝试了println,但都为空:/n我只想让数据库使用从文件中提取的数据更新表当使用聚集操作时。也许有另一种/更简单的方法可以做到这一点?感谢您的帮助Aaron。我相信我已经解决了这个问题。我还想感谢您花时间编写示例代码,因为它帮助我理解了更多内容Hank