ツッコミとか欲しいのでメモ。
elasticsearch-modelを使っている前提で、記事(Article)モデルとタグ(Tag)モデルがあったとする。
記事にタグを紐づける時
article.tag_ids = [1,2,3]
とやっていた場合,ArticleTagモデルで設定したafter_commitは削除時には実行されない。
after_commit on: [:destroy] do
# 実行されない
article.__elasticsearch__.delete_document
article.__elasticsearch__.index_document
end
紐づける時、tag_ids = [1,2,3]
を使わなければいいだけだけどそうもいかない場合、
class Article < ApplicationRecord
def tag_ids(ids = [])
super(ids)
__elasticsearch__.delete_document
__elasticsearch__.index_document
end
end
上記のように書くことでなんとなくやりたいことができた。
concernとかに切り出して、tag
のところを引数にいい感じのメソッド書けばhoge_ids
が増えても対応できそう。
ただ何回もindex登録しまくるのでもっといい方法を探したいところ。