Rails: как перезаписать: метод уничтожения?
-
27-10-2019 - |
Вопрос
Я много чего пробовал, чтобы перезаписать поведение метода: destroy, но ничего не работает.Сначала я использовал плагин actions_as_paranoia, но он не работает с моделью в ассоциации has_many: through.
Я хочу перезаписать метод: destroy, чтобы сделать что-то вроде этого:
родовое словоТо есть я просто хочу обновить другое поле (статус до 0) вместо того, чтобы уничтожать саму запись.
Решение
Вы пробовали?
родовое словоРЕДАКТИРОВАТЬ: Судя по комментариям, может быть что-то еще в работе, и это может быть просто обозначение (: independent=> '') в определении ассоциации - или, если это HABTM, оно может вообще не работать. Может быть, эта информация об удалении и уничтожении через ассоциации поможет? Вставлен соответствующий раздел ниже:
<цитата>Удалить или уничтожить?
ассоциации has_many и has_and_belongs_to_many имеют методы destroy, delete, destroy_all и delete_all.
Для has_and_belongs_to_many удаление и уничтожение одинаковы: они вызывает удаление записей в объединенной таблице.
Для has_many уничтожение всегда будет вызывать метод уничтожения объекта запись (и) удаляются, чтобы выполнялись обратные вызовы. Однако удаление будет либо выполните удаление в соответствии со стратегией, указанной : зависимая опция, или если не задана: зависимая опция, то она будет следуйте стратегии по умолчанию. Стратегия по умолчанию: обнулить (установить внешние ключи равны nil), за исключением has_many: through, где по умолчанию стратегия - delete_all (удалить записи соединения, не выполняя их обратные вызовы).
Другие советы
Я думаю, что лучший способ сделать это - перезаписать фильтр before_destroy:
для управления зависимыми элементами:
Однако это не отменит код генерируемого кода.
Как сказал Микид, этот код был хорош, если мы хотим уничтожить разновидность «вручную»:
родовое словоЭто прекрасно работает.Однако, как я уже сказал, если мы обновим родительскую запись, я не обнаружил, что метод destroy / delete / delete_all вызывается для дочернего элемента ... Итак, если у кого-то есть идея ...