2010-11-22 14 views
0

m:nリレーションの関連オブジェクトは、アプリケーションのhtml select要素で選択することができます(チェックボックスのリストにすることもできます)。 の関連オブジェクトが編集フォームで選択解除されている場合は、関連オブジェクトのオブジェクトリストをクリアする必要があります。 scaffoldコードでは、少なくとも1つの関連オブジェクトが残っている場合にのみ動作します。Grails:すべての関連オブジェクトを削除する

例:

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*の反対)を呼び出します。しかし、これを行うには、どのオブジェクトが関連しているかを把握しなければなりませんでした。関連オブジェクトのリストをクリアする簡単な方法はありますか?関連するオブジェクトのリストが単に空のリストに置き換えられるのであれば、双方向関連が正しく処理されるでしょうか?

答えて

2

問題が発生している可能性があると思うのは、選択ボックスまたはチェックボックスで項目を選択すると、コントローラに要求が返ってくるデータがないということです。アソシエーションからすべてのオブジェクトを削除できるようにするには、追加の非表示フィールドをフォームに追加する必要があります。例えば

多くのカテゴリを持っている製品が存在する場合に次の行を追加します。

離れていつも selectから
<g:hiddenField name="categories" value=""/> 

コントローラのテストを作成して、目的の機能が期待どおりに動作することを確認できます。

関連する問題