如何使用rails中的一个表单删除/更新多个实例

时间:2012-03-15 00:31:39

标签: ruby-on-rails submit

我刚刚开始在rails中编程3天前,同时学习了ruby,我从昨天开始学习如何使用一个表单,删除/更新我的一些实例,我只是很难用一个模型“任务”。这是代码:

<%= form_for @task do |f| %> 
    <ul>
    <% @tasks.each do |task| %>
        <li id="task"><%= f.check_box :done %> <%= f.label :name %> </li>
    <% end %>
    <button onclick="doUpdate()">Mark Selected as done </button>
    <%= button_to "Delete selected", :method => :delete  %>
    </ul>
<% end %>

这是控制器:

def delete
  @tasks = Task.find(:all, :conditions => ["task.done = ?", true])
  @tasks.each do |task|
    task.delete
  end

  @tasks = Task.all
end

我的模型只有2个参数。 name:String and done:Boolean,我不想删除所有选中的复选框。但这对我不起作用

提前致谢。

2 个答案:

答案 0 :(得分:0)

乍一看,请尝试使用task.destroy代替task.deletedone代替task.done delete vs. destroy.

def destroy
  @tasks = Task.find(:all, :conditions => ["done = ?", true])
  @tasks.each do |task|
    task.destroy
  end

  @tasks = Task.all
end

答案 1 :(得分:0)

问题是,你做错了(我会告诉你原因)。我可以粘贴使其工作的代码但我宁愿解释,因为你可能正在学习它。

Task.find(:all, :conditions => ["done = ?", true])将在您的数据库中返回done = true的所有内容。您将删除在数据库中标记为已完成的所有内容,而不是表单上标记的内容。 Task是你的模型,你可以使用find,where和来自activerecord的其他方法访问数据库(如果activerecord听起来不自然,activerecord让你从数据库中获取东西而不需要编写SQL查询)。

您在控制器中真正需要做的是: - 您必须从表单中获取所发送的内容(查看文档/ Web资源以了解param[]的用法)。 - 对于标记为true的每个复选框,您将删除一条记录。 (你得到的每一部分都是正确的,这很好!)

我不认为你的观点是对的,我建议你首先要确保你收到的数据是正确的(params []),然后继续尝试删除记录,或做任何你想做的事情做它。

要“测试”控制器和模型中的变量和代码,请使用print @variable或其他内容(请查看rails docs如何调试)。

我建议你使用destroy而不是删除其他伙伴stackoverflowers说。阅读destroy和delete的文档。

继续前进:)