Rails - проверяет, был ли уничтожен родительский объект и вызывает ли уничтожение на зависимых объектах

Единственное, что сработало для меня, это использовать track by в ng-options, например:

 <select class="dropdown" ng-model="selectedUserTable" ng-options="option.Id as option.Name for option in userTables track by option.Id">

0
задан bdx 27 March 2019 в 04:29
поделиться

2 ответа

Я не мог найти хороший способ сделать это, поэтому остановился на следующем:

0
ответ дан bdx 27 March 2019 в 04:29
поделиться

Вероятно, самым чистым способом достижения этого является использование обратного вызова before_destroy в ModelA для вызова требуемой функции на всех связанных с ней ModelB с

class ModelA < ApplicationRecord
  has_many :model_bs, dependent: :destroy

  before_destroy { |model_a| model_a.model_bs.each { |model_b| model_b. action_only_if_model_a_exists } }
end

Конечно, action_only_if_model_a_exists ] не нужно быть приватным.

Кроме того, вы захотите рассмотреть, сколько model_bs будет иметь любой данный model_a, и при необходимости рассмотрите возможность использования in_batches, а не each.

ОБНОВЛЕНИЕ

Хорошо, основываясь на вашем обновленном объяснении, и мое понимание теперь противоположно тому, что было раньше, как насчет следующего?

class ModelB < ApplicationRecord
  belongs_to :model_a
  after_destroy :action_if_not_called_from_model_a

  private

  def action_if_not_called_from_model_a
    if !caller.join.match(/model_a/)
      # Do things
    end
  end
end
0
ответ дан Jon 27 March 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: