代码之家  ›  专栏  ›  技术社区  ›  deamon

Grails:移除所有关联的对象

  •  0
  • deamon  · 技术社区  · 15 年前

    可以使用应用程序中的html select元素(也可以是复选框列表)选择m:n关系的相关对象。如果 全部的 在编辑窗体中取消选择相关对象,应清除相关对象的对象列表。对于scaffold代码,它只在至少一个相关对象仍然存在的情况下工作。

    例子:

    class Book {
      String name
      static hasMany = [authors: Author]
      belongsTo = Author
    }
    
    class Author {
      String name
      static hasMany = [books: Book]
    }
    
    def b1 = new Book(name: "B1").save()
    def b2 = new Book(name: "B2").save()
    def author = new Author(name: "Stephen").addToBooks(b1).addToBooks(b2).save()
    
    // How to remove all books from the author?
    

    根据Grails文档,我将调用 removeFrom* (与 addTo* )所有相关对象的域对象。但要做到这一点,我必须弄清楚,哪些对象是相关的。是否有更简单的方法清除相关对象的列表?如果相关对象的列表将被一个空列表替换,那么双向关联会被正确地处理吗?

    1 回复  |  直到 15 年前
        1
  •  2
  •   mfloryan    15 年前

    我认为您可能遇到的问题是,当在“选择”框中或通过复选框选择so项时,没有数据会随着对控制器的请求返回。如果希望能够从关联中移除所有对象,则需要向表单添加额外的隐藏字段。

    例如,如果有多个类别的产品,请添加以下内容:

    <g:hiddenField name="categories" value=""/>
    

    除了平常 select .

    您可以为控制器编写一个测试,以确保所需的功能按预期运行。

    推荐文章