我有一个任务模型,它与一个目标模型以多对多的关系加入。
我有一个任务编辑表单,用户可以通过复选框将任何目标与任务相关联。当一个复选框被选中时,它应该表明任务和特定目标之间的关联;当未选中复选框时,不应该有关联。当表单提交时,这应该被持久化到数据库中。
<%= form_for @task do |f| %>
<% Objective.all.each do |objective| %>
<%= check_box_tag :objective_ids, objective.id, @task.objectives.include?(objective), :name => 'task[objective_ids][]' %>
<% end %>
<%= f.button :submit %>
<% end %>
只要用户选中一个复选框,更新任务似乎绝对可以正常工作,但是当用户不选中任何复选框时,:objective_ids
参数(这是一个目标 id 的数组)根本不包含在 POST 操作中。因此,当我@task.update_attributes(params[:task])
在控制器中执行此操作时,任务的目标集合没有更新(即任务不应再有任何与之关联的目标,因为没有选中复选框)。
那么如何确保:objective_ids
参数包含在 POST 中,即使只是作为一个空数组?