Как редактировать флажки без потери существующих значений - PullRequest
0 голосов
/ 20 мая 2018

Я создаю приложение для работы с рельсами.При создании новой компании пользователь имеет возможность выбирать привилегии, связанные с компанией, на «странице новой компании» с помощью флажков.Это работает хорошо, пока пользователь не попытается обновить / отредактировать привилегии, связанные с компанией.

Когда пользователь пытается редактировать льготы, метод редактирования полностью удаляет существующие значения, даже если пользователь не снял флажок на странице редактирования.Так, например, у компании есть льготы, такие как пенсия и бесплатный обед.Пользователь решает отредактировать это и добавить медицинскую страховку к уже существующим льготам.Метод редактирования в этом случае удаляет пенсию и бесплатный обед и сохраняет только медицинскую страховку, несмотря на то, что пользователь не снимает отметку с пенсии и бесплатного обеда.Я хочу, чтобы он редактировал / обновлял метод, чтобы сохранить новые проверенные значения в дополнение к уже существующим, если они не были проверены.Ниже приведен пример кода на странице редактирования

<% 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");
  });
});

1 Ответ

0 голосов
/ 20 мая 2018

Похоже, вы, вероятно, скрываете фактические флажки и вместо этого отображаете изображение на основе класса active на метке, чтобы показать его текущее состояние.Проблема в том, что класс active не правильно указывает на отмеченное состояние поля (потому что вы на самом деле не устанавливаете флажок, если флажок уже установлен, когда категория уже выбрана).Чтобы это исправить, вам нужно сделать что-то вроде

<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 на «активном» классе, вы основывали его на состоянии флажка с CSS, например

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

и тогда вам также не понадобится JS, так как нажатие на метку переключает флажок.

...