Hi,
There is something I don’t understand about :dependent => :destroy. I
hope someone can help me. Consider this code:
class Folder < ActiveRecord::Base
has_many :myfiles
has_many :folders
has_many :group_folders, :dependent => :destroy
validates_uniqueness_of :name, :scope => “folder_id”
validates_presence_of :name
before_destroy :dont_destroy_folder_with_contents
Folders containing files or sub-folders
can not be deleted
def dont_destroy_folder_with_contents
if self.folders.length > 0 or self.myfiles.length > 0
raise “Can’t destroy folder with contents”
end
end
end
It prevents folders with contents from being deleted, however the
group_folders do get deleted because of :dependent => :destroy. How can
I prevent the group_folders from being destroyed when a folder “has
contents”? I do want the group_folders to be destroyed when the folder
is destroyed without a problem.
Thanks.
Mischa.
2006/3/12, Mischa B. [email protected]:
before_destroy :dont_destroy_folder_with_contents
Folders containing files or sub-folders
can not be deleted
def dont_destroy_folder_with_contents
if self.folders.length > 0 or self.myfiles.length > 0
raise “Can’t destroy folder with contents”
end
end
end
Did you try returning false from here ? I think that is what you are
supposed to do to prevent an action.
Hope that helps !
OK, someone on IRC helped me out.
This is the way to do it:
class Folder < ActiveRecord::Base
has_many :myfiles
has_many :folders
has_many :group_folders
before_destroy :dont_destroy_folder_with_contents
Folders containing files or sub-folders
can not be deleted
def dont_destroy_folder_with_contents
if self.folders.length > 0 or self.myfiles.length > 0
raise “Can’t destroy folder with contents”
end
end
after_destroy :destroy_dependant_group_folders
Delete dependant group_folders
This code should be executed after_destroy
def destroy_dependant_group_folders
for group_folder in self.group_folders
group_folder.destroy
end
end
end
Did you try returning false from here ? I think that is what you are
supposed to do to prevent an action.
Yeah, tried that and the group_folders still get deleted…
On 3/13/06, Mischa B. [email protected] wrote:
after_destroy :destroy_dependant_group_folders
Delete dependant group_folders
This code should be executed after_destroy
def destroy_dependant_group_folders
for group_folder in self.group_folders
group_folder.destroy
end
end
end
But what if one or some of the group_folder.destroy commands fail?
You could use a transaction to make sure that this entire destroy is
an all or none change to the db.
-Peter
But what if one or some of the group_folder.destroy commands fail?
You could use a transaction to make sure that this entire destroy is
an all or none change to the db.
Thanks for the suggestion, but I don’t think this is neccesary in my
situation.