Единственное, что сработало для меня, это использовать 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">
Я не мог найти хороший способ сделать это, поэтому остановился на следующем:
Вероятно, самым чистым способом достижения этого является использование обратного вызова 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