Delete All action


#1

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


#2

On Fri, Dec 19, 2008 at 12:20 PM, DAZ removed_email_address@domain.invalid wrote:

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


#3

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

Thanks again,

DAZ

On Dec 19, 5:33 pm, “Craig D.” removed_email_address@domain.invalid


#4

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