Вопрос

Я много чего пробовал, чтобы перезаписать поведение метода: 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 вызывается для дочернего элемента ... Итак, если у кого-то есть идея ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top