Оценка: зависимый =>: уничтожить - PullRequest
4 голосов
/ 27 апреля 2009

В Rails 2.2.2 (ruby 1.8.7-p72) я хотел бы оценить влияние разрушения объекта перед тем, как это делать. То есть Я хотел бы иметь возможность генерировать список всех объектов, на которые будет влиять: зависимый =>: уничтожить (через ассоциации объекта). Реальная проблема, которую я пытаюсь решить, - предоставить пользователю список всего, что будет удалено, и попросить его подтвердить действие.

Кто-нибудь может порекомендовать хороший способ сделать это? Я только начал изучать ActiveRecord :: Ассоциации, но я не добился большого прогресса.

Обновление: в моем конкретном случае у меня есть различные уровни объектов (A -> B -> C).

Ответы [ 4 ]

6 голосов
/ 27 апреля 2009

Это должно помочь вам начать ... Очевидно, вам придется настроить его, но в этом списке перечислены все имена ассоциаций, которые зависят от уничтожения в классе BlogEntry:

BlogEntry.reflect_on_all_associations.map do |association|
  if association.options[:dependent] == :destroy
    # do something here...
    association.name
  end
end.compact
=> [:taggings, :comments]
1 голос
/ 27 апреля 2009

Просто вручную поддерживайте список связанных объектов с зависимым уничтожением (возможно, в любом случае это нужно сделать), а затем имейте именованные_скопы для каждого, чтобы включить включенные объекты для отображения.

0 голосов
/ 26 июня 2009

Недавно я написал простой плагин Rails, который решает эту проблему.
Проверьте это на github: http://github.com/murbanski/affected_on_destroy/tree

0 голосов
/ 27 апреля 2009

Я бы сказал, что, как уже упоминалось, есть способ отображения затронутых записей для пользователя, а затем есть две кнопки / ссылки, одна из которых предназначена для удаления, возможно, с предупреждением для пользователя, который спрашивает, проверяли ли они другую. ссылка, представляющая собой список всех записей, на которые они будут влиять.

Тогда, если вы хотите быть действительно уверенным, вы могли бы также выполнить мягкое удаление, пометив их как удаленные в базе данных вместо того, чтобы фактически удалять их, что может оказаться полезным, я не знаю, как вы справитесь с этим на автоматическое зависимое удаление, возможно, с act_as_paranoid, или какая-то самостоятельная версия с обратным вызовом родительской модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...