首页 > 解决方案 > Rails 无法保存未选中的复选框

问题描述

我刚刚注意到,当用户尝试删除表单上的检查时,它实际上并没有维护状态。

我的表单如下所示(使用 Slim)

=f.tb_label :marketing_systems
=hidden_field_tag 'course_group[marketing_systems][]', nil
.col-sm-10
 .multi-select
  table
   tbody
    -MarketingSystem.ordered.each do |system|
     -input_name = "course_group_marketing_system_#{system.id}"
     tr
      td = check_box_tag 'course_group[marketing_system_ids][]',
                 system.id,
                 @course_group.marketing_systems.include?(system),
                 id: input_name

我想在隐藏标签字段上设置一个 nil ,它会在为空时推动它。然而事实并非如此。我的 check_box_tag 设置有问题吗?

我尝试将参数放在括号中,然后在 check_box_tag 上放置checked = false,但这没有用。如果我添加 value = 0 那么它会引发一个参数太多的问题。如果未选中,我只是想通过删除 system.id 来更新数据。

标签: ruby-on-railscheckbox

解决方案


改用就好collection_check_boxes了。

= form_for(@course_group) do |f|
  .col-sm-10
   .multi-select
     table
       f.collection_check_boxes(:marketing_systems, :id, :name) do |b|
         tr
           td
             = b.label
           td
             = b.check_box

推荐阅读