我正在制作一个简单的待办事项列表应用程序来自学Ruby on Rails,但是我遇到了一个问题。我有一个简单的表单,列出待办事项,左侧有一个复选框,底部有一个“更新”按钮,如下所示:
[]做菜
[]取出垃圾
[]接管世界
(更新)
每个待办事项都是数据库中具有“已完成”布尔字段的单独记录。我希望表单将一个已检查项目ID的列表提交给一个动作,在该动作中我可以将每个项目的“已完成”字段设置为true,这将从视图中隐藏它们。
我知道如何制作一个引用多个模型的表单,但不知道引用同一模型的多个记录的表单。有什么提示吗?
谢谢!
答案 0 :(得分:26)
Railscasts是你的朋友!
http://railscasts.com/episodes/52-update-through-checkboxes
这很简单:
# routes.rb
map.resources :tasks, :collection => { :complete => :put }
# tasks_controller.rb
def complete
Task.update_all(["completed_at=?", Time.now], :id => params[:task_ids])
end
# views\tasks\complete.html.erb
<% form_tag complete_tasks_path, :method => :put do %>
<ul>
<% for task in @incomplete_tasks %>
<li>
<%= check_box_tag "task_ids[]", task.id %>
<%= task.name %>
</li>
<% end %>
</ul>
<%= submit_tag "Mark as Complete" %>
<% end %>
答案 1 :(得分:2)
哇。那是一些时机。我的RSS阅读器中关于此问题的项目是来自Ryan Bates的最新railscast,它似乎涵盖了您的要求。
答案 2 :(得分:1)
为什么在选中项目时不使用远程功能更新数据库,并完全删除更新按钮?
答案 3 :(得分:0)
由于您可以在创建表单时包含每条记录的ID,因此您希望控制器迭代您发布的项目,然后相应地查找和更新每条记录。