复选框状态控制-最佳选项?(javascript/jquery、数据库或其他)

复选框状态控制-最佳选项?(javascript/jquery、数据库或其他),javascript,jquery,ruby-on-rails,checkbox,Javascript,Jquery,Ruby On Rails,Checkbox,我正试图找到实施解决方案的最佳方法,我想听听你对此的看法 我有一个表单rails-simpleform和几个字段。其中一些字段有一个关联的复选框。复选框的用法很简单:如果用户希望将字段留空,则数据可能丢失,他需要选中复选框,这是为了确保他将字段留空 现在我用javascript和jquery验证控制复选框。对于我在模型上使用的字段,进行以下验证 validates :field, acceptance: true, :unless => :field? 这是有效的,除非用户忘记输入一些数

我正试图找到实施解决方案的最佳方法,我想听听你对此的看法

我有一个表单rails-simpleform和几个字段。其中一些字段有一个关联的复选框。复选框的用法很简单:如果用户希望将字段留空,则数据可能丢失,他需要选中复选框,这是为了确保他将字段留空

现在我用javascript和jquery验证控制复选框。对于我在模型上使用的字段,进行以下验证

validates :field, acceptance: true, :unless => :field?
这是有效的,除非用户忘记输入一些数据,rails抛出一些错误,例如:字段必须被接受,然后页面刷新,复选框状态丢失

为了在编辑或更新操作中控制这一点,我在文档加载时运行了一个脚本,该脚本检查字段的内容是否为空,如果为空,则表示应选中该复选框

除此之外,当出现错误并刷新页面时,新建或创建操作也不起作用

所以我在寻找更好的解决方案。。。我应该使用jquery.cookie之类的东西并将复选框状态存储在cookie上吗?我是否应该将所有复选框添加到数据库并以这种方式控制状态?我不喜欢用巨大的表来控制数据库中的一切。。。我应该将状态作为参数传递到表单上吗

您对实现这一目标的最佳解决方案有何想法

--更新--

以下是控制器代码:

respond_to do |format|
  if @sample.save
    format.html { redirect_to @sample, notice: 'Sample was successfully created.' }
    format.json { render json: @sample, status: :created, location: @sample }
  else
    format.html { render action: "new" }
    format.json { render json: @sample.errors, status: :unprocessable_entity }
  end
end
在这方面:

<% if @sample.errors.any? %>
  <div id="error_explanation" class="field_with_errors">
    <h3>Não foi possível gravar o registo. Erro(s) encontrado(s): <%= pluralize(@sample.errors.count, "erro") %></h3>
    <ul>
    <% @sample.errors.full_messages.each do |msg| %>
      <li><%= msg %></li>
    <% end %>
    </ul>
  </div>
<% end %>
形式


听起来您在控制器中所做的事情与Rails颗粒相反。如果您在控制器的else中使用@resource来响应_,那么您应该会看到一个页面重新加载,其中包含内联呈现的错误,并记住除密码以外的信息。它看起来确实正确。@sample的另一个非密码信息还在吗?还有,你能把你的表格放上去吗?最后,能否尝试删除验证中的除非::字段部分?是的,其余字段仍然存在。只有复选框失去了它们的状态。我也尝试了不使用除非::字段,但行为是一样的
<%= simple_form_for @sample, :html => { :class => 'form-horizontal' } do |f| %>
<!-- Error messages while saving-->
<% if @sample.errors.any? %>
  <div id="error_explanation" class="field_with_errors">
    <h3>Não foi possível gravar o registo. Erro(s) encontrado(s): <%= pluralize(@sample.errors.count, "erro") %></h3>
    <ul>
    <% @sample.errors.full_messages.each do |msg| %>
      <li><%= msg %></li>
    <% end %>
    </ul>
  </div>
<% end %>
<br>
<!-- end of error messages -->
<div class="row">
    <div class="span4">
            <fieldset>
                <legend>Detalhes da Informação</legend>
                <div class="control-group">
                    <%= f.label :pcris, "PCR Anterior?", :class => 'control-label' %>
                    <div class="controls">
                        <%= f.select :pcris, NAOPREENCHIDO, :include_blank => true %>
                    </div>
                </div>
              <div class="resultpcr control-group">
        <%#= f.label :resultFirstTest, "Res. PCR Anterior", :class => 'control-label' %>
      <div class="controls">
        <%#= f.select :resultFirstTest, RESULTADO, :include_blank => true, :id => 'result_first_test' %>
      </div>
      </div>
                <div class="control-group">
                    <%= f.label :colheitaPCR, "Colheita de PCR", :class => 'control-label' %>
                    <div class="controls">
                        <%= f.select :colheitaPCR, COLHEITA_PCR, :include_blank => true %>
                    </div>
                </div>
                <div class="control-group">
                    <%= f.label :dateOfSample, "Data de Colheita", :class => 'control-label' %>
                    <div class="controls">
                        <%= f.text_field :dateOfSample, :class => 'date_field' %><input type="checkbox" name="dtc" id="dtc_nao_preenchido">nao preenchido<br>
                    </div>
                </div>
                <div class="control-group">
                    <%= f.label :horaColheita, "Hora de Colheita", :class => 'control-label' %>
                    <div class="controls">
                        <%= f.text_field :horaColheita, :class => 'time_field' %><input type="checkbox" name="hc" id="hc_nao_preenchido">nao preenchido<br>
                    </div>
                </div>
                <div class="control-group">
                    <%= f.label :dateSampleSent, "Data de Envio da U.S.", :class => 'control-label' %>
                    <div class="controls">
                        <%= f.text_field :dateSampleSent, :class => 'date_field' %><input type="checkbox" name="dtss" id="dtss_nao_preenchido">nao preenchido<br>
                    </div>
                </div>
                <div class="dateSampleReceived control-group">
                    <%= f.label :dateSampleReceived, "Data de Entrada no Lab", :class => 'control-label' %>
                    <div class="controls">
                        <%= f.text_field :dateSampleReceived, :class => 'date_field' %><input type="checkbox" name="dtsr" id="dtsr_nao_preenchido">nao preenchido<br>
                    </div>
                </div>
                <div class="control-group">
                    <%= f.label :sampleReceivedBy, "Amostra recebida por", :class => 'control-label' %>
                    <div class="controls">
                        <%= f.text_field :sampleReceivedBy, :class => 'text_field' %>
                    </div>
                </div>
                <div class="control-group">
                    <%= f.label :motherPMTCT, "PTV da Mãe", :class => 'control-label' %>
                    <div class="controls">
                        <%= f.select :motherPMTCT, MOTHER_PMTCT, :include_blank => true %>
                    </div>
                </div>
                <div class="control-group">
                    <%= f.label :infantPMTCT, "PTV da Criança", :class => 'control-label' %>
                    <div class="controls">
                        <%= f.select :infantPMTCT, INFANT_PMTCT, :include_blank => true %>
                    </div>
                </div>
                <div class="control-group">
                    <%= f.label :semanasPMTCT, "Quantas Semanas", :class => 'control-label' %>
                    <div class="controls">
                        <%= f.select :semanasPMTCT, SEMANAS_PMTCT, :include_blank => true %>
                    </div>
                </div>
            </fieldset>
    </div>
</div>
<div class="form-actions">
<button type="submit" class="btn btn-eid">
  <i class="fa fa-check"> Gravar FSR</i>
</button>
<%= link_to '<i class="fa fa-times"> Cancelar</i>'.html_safe,
            samples_path, :class => 'btn btn-danger' %>
</div>
<% end %>