9

我正在制作一个简单的待办事项列表应用程序来自学 Ruby on Rails,但是我遇到了问题。我有一个简单的表单,其中列出了待办事项,左侧有一个复选框,底部有一个“更新”按钮,如下所示:

[] 洗碗
[] 倒垃圾
[] 接管世界
(更新)

每个待办事项都是数据库中具有“已完成”布尔字段的单独记录。我希望表单将已选中项目 ID 的列表提交给一个操作,在该操作中我可以将每个项目的“已完成”字段设置为 true,这会将它们从视图中隐藏。

我知道如何制作一个引用多个模型的表单,但不是一个引用同一模型的多个记录的表单。有小费吗?

谢谢!

4

4 回答 4

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 %>
于 2009-06-08T09:34:46.607 回答
2

哇。那是一些时间。在我的 RSS 阅读器中,这个问题之前的项目是 Ryan Bates 的最新Railscast,它似乎完全涵盖了您的要求。

于 2009-06-08T09:27:48.370 回答
1

为什么不在检查项目时使用远程功能更新数据库,并完全摆脱更新按钮?

于 2009-06-08T03:40:39.213 回答
0

由于您可以在创建表单时包含每条记录的 ID,因此您希望控制器遍历您发布的项目,然后相应地查找并更新每条记录。

于 2009-06-08T03:42:00.587 回答