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の場合、これは例外をスローします。つまり、すべてのタグを削除すると、保存に失敗します。