我刚刚开始在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,我不想删除所有选中的复选框。但这对我不起作用
提前致谢。
答案 0 :(得分:0)
乍一看,请尝试使用task.destroy
代替task.delete
,done
代替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的文档。
继续前进:)