0

AssetとTagという2つのドメインクラスを作成しました。アセットには多くのタグを付けることができます

// Asset.groovy
class Asset {
    static hasMany = [tags: Tag]
}

// Tag.groovy
class Tag {
    static belongsTo = Asset
    String word
}

タグはビューのテキストフィールドに入力され、それぞれがコンマで区切られます。

アセットフォームが送信されると、AssetControllerはTag.findOrSaveWhere新しいタグの作成またはAsset.addToTag

def tags_list = params?.tags?.split(",")
tags_list.each {
    def tag = Tag.findOrSaveWhere(word: it.trim())
    assetInstance.addToTags(tag)
}

これらはすべて非常にうまく機能しますが、ユーザーがタグを更新して削除した場合、基本的にアセットからタグを削除しようとしています。

更新時にタグを削除するにはどうすればよいですか?

編集すべてのタグを削除してからAssetインスタンスを保存するという古いアプローチを採用することで、これについてもう少し詳しく説明しました。

assetInstance.tags.clear()
def tags_list = params?.tags?.split(",")
tags_list.each {
    def tag = Tag.findOrSaveWhere(word: it.trim())
    assetInstance.addToTags(tag)
}

ただし、タグがnullの場合、これは例外をスローします。つまり、すべてのタグを削除すると、保存に失敗します。

4

1 に答える 1

0

私の問題を解決しました。更新アクションでタグをクリアすることは正しい動きでしたが、フォームからの空のタグ文字列に注意する必要がありました。

私の最終結果は私の次のブロックでしたAssetController

assetInstance.tags.clear()
def tags_list = params?.tags?.split(",")
tags_list.each {
def tag = Tag.findOrSaveWhere(word: it.trim())
if (tag.id != null) // to prevent null id exceptions
    assetInstance.addToTags(tag)
}
于 2012-07-19T18:09:58.110 に答える