如何在不丢失现有值的情况下编辑复选框

How to edit check-boxes without losing existing values

我正在使用 rails 构建求职应用程序。在创建新公司时,用户可以通过复选框在 "Company new page" 中 select 与公司相关的福利。在用户尝试 update/edit 与公司相关的津贴之前,它一直有效。

当用户尝试编辑津贴时,编辑方法会完全删除现有值,即使用户没有在编辑页面中取消选中它们也是如此。例如,一家公司有养老金和免费午餐等津贴。用户决定对其进行编辑并将健康保险添加到现有的津贴中。尽管用户没有取消选中养老金和免费午餐,但此实例中的编辑方法删除了养老金和免费午餐,只保存了健康保险。我想要的是他 edit/update 方法除了已经存在的值之外还保存新的选中值,前提是它们没有被取消选中。下面是编辑页面中的示例代码

<% Perk.all.each do |perk| %>
  <input type="checkbox", class="hidden", value="<%= perk.id %>" 
  name="company[perk_ids][]" id="company_perk_ids_<%= perk.id %>"/>
  <label class="category-choice <%= "active" if 
  @company.perk_ids.include? perk.id %>" for="company_perk_ids_<%= 
  perk.id %>">
   <% perk.name %>
  </label
<% end %>

这是我公司控制器中的示例代码

  def edit
    @company = Company.find(params[:id])
  end

  def update
    edit
    @company.update(company_params)
    if @company.update(company_params)
      flash[:notice] = "Company profile successfully updated."
      redirect_to @company
    else
      render :edit
    end
  end

在我的 js 中,我有

$(document).ready(function(){
  $(".category-choice").click(function(){
    $(this).toggleClass("active");
  });
});

您似乎隐藏了实际的复选框,而是根据标签上的 active class 显示图像以显示其当前状态。问题是 active class 没有正确指示框的选中状态(因为当一个类别已经被选中时,您实际上并没有将框设置为选中)。要解决此问题,您需要执行类似

的操作
<input type="checkbox" class="hidden" value="<%= perk.id %>" name="company[perk_ids][]" id="company_perk_ids_<%= perk.id %>" <%= "checked" if @company.perk_ids.include? perk.id %> />

如果你的 CSS 不是基于 'active' class 而是基于 CSS 复选框的状态,那么这将立即显而易见 [= =14=]

input[type="checkbox"]:checked + label { ... } # style for your checked box label

然后您也不需要 JS,因为单击标签会切换复选框。