请问在rails里如何实现复选框删除

就像我们的邮件列表一样,在表格的每行记录前面都有一个复选框,我们可以选择多条记录后,点“删除”按钮,一次删掉多条记录。请问在rails里如何实现这种操作呢?

哦,我在一楼说的,对于在rails麻烦了,因为rails中已经有很方便的做法了
[code="java"]

tasks_controller.rb

def complete
Task.delete([color=red]params[:ids][/color])
end

<% form_tag complete_tasks_path do %>


    <% for task in @tasks %>

  • [color=red]<%= check_box_tag "task_ids[]", task.id %>[/color]
    <%= task.name %>

  • <% end %>

<%= submit_tag "[color=red]Delete selected[/color]" %>
<% end %>[/code]

真是太方便了,

[code="ruby"] # Delete a single object
Todo.delete(1)

# Delete multiple objects
todos = [1,2,3]
Todo.delete(todos)[/code]

这个很简单啊!

我在这里给你说一下思想,其它对于这一点,主要是javascript方面的,和rails的关系不大,因为原理都差不多.

在表单内有一个hidden field,名为[color=red]ids[/color]

每当我们选中一个check box后,就将ids的值追加 [color=red],id[/color]
那个id是指每个check box的id.

这样当我们选了若干个check box后,表单中的名为ids的hidden的值就为是这个样子:
[color=red]1,2,3,5,6[/color]

然后我们点删除的话,就将ids作为参数传到controller的action,然后调用一些activerecord的方法来删除这多条记录.
就是这样子.

不知道我讲明白了没有.

我又想了一下,这样不知道可不可以,你试试看,比我上面说的简单一些:
[code="java"]
<% form_tag(:action => 'to_delete') %>
<% for term in @terms %>

">
CRUD
<%= check_box_tag 'to_delete[]', term.id %>

<% end %>
<%= submit_tag "Delete Selected" %>

///////////////////////
def to_delete
if request.post?
terms = params[:to_delete].map { |t| Term.find_by_permalink(t) }
terms.delete(nil)
terms.each { |t| t.destroy }
redirect_to :controller => 'terms', :action => 'letter'
end
end

[/code]

最好采用第一楼,使用js构造hidden域,这样提交表单的url更容易符合REST的删除方法约定。
删除数据也应该用第二楼的方法,rails中对象执行destroy方法可以增加回调动作,比如关联删除(:depedent => :destroy)也只能在destroy中执行。