2012-03-15 60 views
0

我刚刚在3天前开始使用rails编程,同时学习了ruby,自从昨天开始研究如何使用一种形式,删除/更新我的一些实例,我只使用一个模型“任务”。下面的代码:如何使用一种形式在rails中删除/更新多个实例

<%= 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和done:Boolean,我不想删除所有选中的复选框。但这不适用于我

在此先感谢。

+0

您看到了什么问题?有什么异常? – KMC 2012-03-15 00:50:26

回答

0

的问题是,你正在做的是错误的(我会告诉你为什么)。我可以粘贴可以使其工作的代码,但我更愿意解释,因为您可能正在学习。

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

你真正需要在你的控制器中执行的操作是: - 你必须得到从表格发送的内容(检查文档/网页资源的使用param[])。 - 对于标记为true的每个复选框,您将删除一条记录。 (你得到了每个部分的权利,这是很好!)

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

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

我建议你使用破坏而不是删除,因为其他同胞stackoverflowers说过。阅读销毁和删除文档。

继续:)

+0

谢谢!你救了我的命!我无法找到适当的答案。我真的很惭愧于模型与表达式的混淆。(我得到了你说的一切,我将检查params的用法并进行测试。 – 2012-03-15 01:36:53

0

在乍看之下,尝试使用task.destroy,而不是task.delete,并且done代替task.donedelete vs. destroy.

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

    @tasks = Task.all 
end 
+0

我用你的代码,这一次它返回一个空白页...并且我检查它没有路由到销毁路径,而是去创建“/任务”。所以我试图在创建控件上做一些事情,但没有发生任何事情......所以令人困惑; x – 2012-03-15 01:26:00

相关问题