2011-07-08 14 views
0

私には問題があります削除の投稿者Grails:動的フォーム

私は1対多一方向の関係でクラスブックとクラスAuthorを持っている:

class Book{ 

    String isbn 
    ... 

    List<Author> authors 
    static hasMany = [ authors: Author ] 
} 

class Author { 

    String firstname 
    String lastname 
    ... 

} 

ノート:クラスの著者でbelongToがありません。

私は動的なフォームを使用

enter image description here

ボタンを注意してくださいは、著者を追加し、著者を削除します。フォームからHTMLコードを作成または削除するために、HTMLコードを追加するためにJavaScriptを使用します。私は、コントローラ内のクラスを節約その後

def save = { 
      def book = new Book() 

      if (params.id){ 
       book = Book.get(params.id)      
      } 

      book.properties = params 

      if(book.save()){ 
       redirect(controller:"book", action:"all") 
       return 
      }else{ 
       render(view:'form', model:["book": book]) 
       return 
      } 
     } 

それは仕事ものためには、著者編集著者しかしのためではない削除作者用を追加します。 投稿者削除ボタンを使用して送信フォームをクリックした場合、の著者は書籍から削除しません。 編集前のすべての作者がいます。

どうすればこの問題を解決できますか? この問題の良い解決策ですか?

は、あなたがあなたの要求と、それを除去するためにGrailsに明示的な指示で削除するのが著者のIDを送信しない限り、Grailsのは、あなたが削除したいされている著者知るための方法はありませんたくさん トム

+0

JSでフォームをどのように生成しましたか? – Queequeg

答えて

2

ありがとうございました。現時点では、paramsの著者は著者の削除を意味するものではありません。

フォームの中に何かする必要があるので、「著者を削除する」ときに、隠しフィールドで削除する著者のIDと削除用のIDを保存する必要があります。次に何かのように ...

def authorToRemove = Author.get(params.authorId) 
def book = Book.get(params.id) 
book.removeFromAuthors(authorToRemove) 
+0

著者の完全なオブジェクトを取得する代わりに、プロキシをロードするだけでも機能します。 def authorToRemove = Author.load(params.authorId) –