QA@IT
«回答へ戻る

回答を投稿

どんな処理をするのかにもよりますが、has_many のオプションで指定できるコールバックが役に立ちそうな気がします。

たとえば、下記の例では、追加されるタグ、削除されるタグがログに出力されます (Tag#name でタグ名が得られるものとします)。

class User < ActiveRecord::Base
  has_many :taggings
  has_many :tags, through: :taggings, before_add: :before_add_tag, before_remove: :before_remove_tag

  private
  def before_add_tag(tag)
    logger.debug "#{tag.name} added"
  end

  def before_remove_tag(tag)
    logger.debug "#{tag.name} removed"
  end
end
どんな処理をするのかにもよりますが、`has_many` のオプションで指定できるコールバックが役に立ちそうな気がします。

- [ActiveRecord::Associations::ClassMethods](http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#module-ActiveRecord::Associations::ClassMethods-label-Association+callbacks)

たとえば、下記の例では、追加されるタグ、削除されるタグがログに出力されます (Tag#name でタグ名が得られるものとします)。

```ruby
class User < ActiveRecord::Base
  has_many :taggings
  has_many :tags, through: :taggings, before_add: :before_add_tag, before_remove: :before_remove_tag

  private
  def before_add_tag(tag)
    logger.debug "#{tag.name} added"
  end

  def before_remove_tag(tag)
    logger.debug "#{tag.name} removed"
  end
end
```