Evaluating :dependent => :destroy

社会主义新天地 提交于 2020-01-14 13:06:49

问题


In Rails 2.2.2 (ruby 1.8.7-p72), I'd like to evaluate the impact of destroying an object before actually doing it. I.e. I would like to be able to generate a list of all objects that will be affected by :dependent => :destroy (via an object's associations). The real problem I'm trying to solve is to give a user a list of everything that will be deleted and having them confirm the action.

Can anyone recommend a good way to go about this? I've just started looking into ActiveRecord::Associations, but I haven't made much headway.

Update: In my particular case, I've got various levels of objects (A --> B --> C).


回答1:


This should help get you started... Obviously you'll have to customize it but this lists all association names that are dependent destroy on the class BlogEntry:

BlogEntry.reflect_on_all_associations.map do |association|
  if association.options[:dependent] == :destroy
    # do something here...
    association.name
  end
end.compact
=> [:taggings, :comments]



回答2:


Just manually maintain a list of associated object with dependent destroy (probably a go thing to do anyway) and then have named_scopes for each to pull in the included objects to display.




回答3:


I'd say that as mentioned have a way of displaying affected records to the user, then have two buttons/links, one that is a delete, maybe with a confirm alert for the user which asks if they have checked the other link which is a list of all records they will be affecting.

Then if you want to be really sure you could also do a soft delete by marking them as deleted at in the database instead of actually deleting them which may well come in handy, I don't know how you would handle that on the automatic dependent delete, maybe with acts_as_paranoid, or some kind of self rolled version with a callback on the parent model.




回答4:


Recently I wrote a simple Rails plugin that solves this problem.
Check it out on github: http://github.com/murbanski/affected_on_destroy/tree



来源:https://stackoverflow.com/questions/791721/evaluating-dependent-destroy

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!