Ruby on rails 复选框标记错误显示支票

Ruby on rails 复选框标记错误显示支票,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个表格显示任务是否完成。您可以选中该框将模型的:is_complete属性设置为true,然后再次选中该框将其设置为false。或者这就是它应该如何工作的。我可以将任务标记为完成,点击“更新”按钮,任务就可以标记为完成。但是,当我尝试在之后取消选中任务时,在我再次点击更新按钮之前,不会向更新操作发送任何内容,直到它们最终被标记为未完成 形式 我很确定问题在于显示一个方框是否被选中的逻辑。任务完成了吗?因为如果我删除了这段代码,尽管框永远不会显示为选中状态,但任务在后端的选中和取消选中都非常

我有一个表格显示任务是否完成。您可以选中该框将模型的:is_complete属性设置为true,然后再次选中该框将其设置为false。或者这就是它应该如何工作的。我可以将任务标记为完成,点击“更新”按钮,任务就可以标记为完成。但是,当我尝试在之后取消选中任务时,在我再次点击更新按钮之前,不会向更新操作发送任何内容,直到它们最终被标记为未完成

形式


我很确定问题在于显示一个方框是否被选中的逻辑。任务完成了吗?因为如果我删除了这段代码,尽管框永远不会显示为选中状态,但任务在后端的选中和取消选中都非常好。只有在包含此代码段时,我才遇到在第二次单击“更新”后未发送任何内容的问题。您知道为什么会发生这种情况吗?

问题是,未选中的复选框将永远不会发送到服务器

这里有一个技巧:在check_box_标记前面添加一个同名的隐藏输入字段,并将其设为假值,如下所示:

<%= form_tag '/day_tasks/update', :method => :put do %>                                    
  <% @day_tasks.each do |day_task| %>     
    <%= hidden_field_tag "day_tasks[#{day_task.id}]", "0" %>
    <%= check_box_tag "day_tasks[#{day_task.id}]", "1", day_task.is_complete? %>               
    <%= day_task.task.content %><br/>                                                            
  <% end %>                                                                                       
  <%= submit_tag "Update" %>                                                                      
<% end %>
您的更新操作:

def update
  params[:day_tasks] ||= {}
  params[:day_tasks].each do |task_id, completed| 
    DayTask.find(task_id).update_attribute(:is_complete, completed)
  end 
  redirect_to day_tasks_path 
end 
<%= form_tag '/day_tasks/update', :method => :put do %>                                    
  <% @day_tasks.each do |day_task| %>     
    <%= hidden_field_tag "day_tasks[#{day_task.id}]", "0" %>
    <%= check_box_tag "day_tasks[#{day_task.id}]", "1", day_task.is_complete? %>               
    <%= day_task.task.content %><br/>                                                            
  <% end %>                                                                                       
  <%= submit_tag "Update" %>                                                                      
<% end %>
day_tasks[task_id] = 0/1 (not completed / completed)
def update
  params[:day_tasks] ||= {}
  params[:day_tasks].each do |task_id, completed| 
    DayTask.find(task_id).update_attribute(:is_complete, completed)
  end 
  redirect_to day_tasks_path 
end