У меня есть форма, которая передает набор идентификаторов флажков в контроллер через collection_check_boxes. Каждый раз, когда некоторые из этих флажков могут быть отмечены или сняты. У непроверенных записей удаляются их записи, и любой обратный вызов before_destroy, который я установил, игнорируется. Нашел эту запись API, которая объясняет это поведение:
collection = objects Заменяет содержимое коллекций, удаляя и добавляя объекты соответствующим образом. Если параметр: through имеет значение true, обратные вызовы в моделях объединения запускаются, кроме как уничтожить обратные вызовы, поскольку удаление является прямым.
Имея это в виду, как я могу узнать, какие идентификаторы не проверяются? По крайней мере, я хотел бы сообщить пользователю, какие записи были уничтожены.
View
<%= f.collection_check_boxes(:condition_ids, target_participant.encounter.ruleset.conditions, :id, :name) do |b|
<li>
<%= b.check_box + " " + b.label(class: "p3 damage-model-checkbox-label") do %>
<%= b.text %>
<% end %>
</li>
<% end %>
Контроллер
def update
@target_participant.update(participant_params)
end