Xåp*_* - 16 forms rest post activerecord ruby-on-rails
我有一个Task模型,它与Objective模型以多对多的关系连接起来.
我有一个任务编辑表单,用户可以通过复选框将任何目标与任务相关联.选中复选框时,它应指示任务与特定目标之间的关联; 如果未选中复选框,则应该没有关联.这应该在表单提交时保留到数据库.
<%= 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 %>
Run Code Online (Sandbox Code Playgroud)
只要用户选中了一个复选框,更新任务似乎就可以正常工作,但是当用户没有选中任何复选框时,:objective_idsparam(这是一个Objective ids数组)根本不包含在POST操作中.因此,当我@task.update_attributes(params[:task])在控制器中执行时,任务的目标集合不会更新(即,任务不应该有任何与之关联的目标,因为没有选中复选框).
那么我怎样才能确保:objective_idsparam包含在POST中,即使只作为一个空数组?
cut*_*ion 30
使用空值在所有复选框上方添加隐藏字段.如果用户没有选中任何复选框,它将被发送.
<%= form_for @task do |f| %>
<%= hidden_field_tag "task[objective_ids][]", nil %>
<% 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 %>
Run Code Online (Sandbox Code Playgroud)
这是一个关于此的良好的轨道广播.
您可能还想检查它的源代码.
| 归档时间: |
|
| 查看次数: |
4864 次 |
| 最近记录: |