Delete All action

Hi,

What is the best way to delete all members of a model?

For example I have a tasks model and want to put a link in that will delete all tasks at once. Something like,

@tasks = Task.all @tasks.each { |task| task.destroy }

Do I need another action for this, and what should the link to it be?

cheers,

DAZ

Hi,

What is the best way to delete all members of a model?

For example I have a tasks model and want to put a link in that will

delete all tasks at once. Something like,

@tasks = Task.all

@tasks.each { |task| task.destroy }

If you need to allow callbacks to run or dependent associations to also be destroyed, you can use Task.destroy_all. If you don’t need those things, Task.delete_all will be much faster.

Do I need another action for this, and what should the link to it be?

You could add another route. For example,

map.resources :tasks, :collection => { :destroy_all => :delete }

In TasksController, you’d add something like

def destroy_all Task.destroy_all

redirect, render some RJS, etc.

end

In a view, you could

link_to “Delete all”, destroy_all_tasks_path

You might want to put a confirmation on the link_to.

Regards, Craig

cheers Craig, those instructions were really clear and worked perfectly.

Thanks again,

DAZ

I'd now like to take this a step further and allow users to select which tasks they want to delete (using check boxes probably) then select 'delete all checked tasks'. Does anybody have any pointers on how to go about this and how the form would look? I'm guessing that I would need to create a @selected_tasks array somehow from what was submitted and then call delete_all on that?

cheers,

DAZ