Сопоставление карт не выполняется after_destroy - PullRequest
0 голосов
/ 11 февраля 2020

Если я изменю ассоциации своей модели через настройку коллекции, ни мой after_destroy, ни мои обратные вызовы after_remove не сработают.

if image_params[:tags]
    @image.tags = image_params[:tags].map { |tag|
    Tag.create(title: tag) unless Tag.where(title: tag).exists?
    Tag.find_by(title: tag)
  }
end

class TagRelation < ApplicationRecord
  belongs_to :tag
  belongs_to :taggable, polymorphic: true

  # Destroy tag if no other items are related
  after_destroy do
    self.tag.check_count
  end
end

class Tag < ApplicationRecord
  has_many :tag_relations, dependent: :destroy, after_remove: :check_count
  has_many :gallery_images, through: :tag_relations, source_type: 'GalleryImage', source: :taggable
  has_many :streams, through: :tag_relations, source_type: 'Stream', source: :taggable

  validates :title, uniqueness: true

  def count
    self.tag_relations.count
  end

  def check_count
    self.destroy if self.count === 0
  end
end

Что я могу сделать, чтобы эта работа работала?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...