Rails 4.2:在表单验证错误

时间:2016-05-12 00:08:39

标签: ruby-on-rails ajax

我有一个Rails 4.2应用程序。在我的“新文档”表单中,我有一个select和一个包含collection_check_boxes的div。当用户更改select的值时,我使用AJAX重新填充包含复选框的div,以便可用的复选框根据在选择菜单中选择的项目而更改。 AJAX工作正常。

以下是检测选择更改时间的Javascript:

$(function() {
  $(document).on('change', '#document_project_id', function(event) {
    $.ajax('/populate_document_reviewer_list', {
      type: 'GET',
      dataType: 'script',
      data: {
        project_id: $("#document_project_id option:selected").val(),
      }
    });
  });
});

我的问题是,如果表单中的某些内容未通过验证,则会显示包含错误的表单。在这个重新显示的表单中,用户对select的选择是预先填充的,但包含复选框的div显示默认选项,因为select上的onchange没有触发,因此我的AJAX没有显示正确的复选框。 / p>

我的问题是,如何在表单验证错误后显示正确的复选框?

1 个答案:

答案 0 :(得分:0)

解决了!

在我的表单中,我添加了一个条件来检查是否有任何错误。如果有错误,我会根据选择中的所选项目手动填充复选框div。如果没有错误,我会显示默认文本。

<% if @doc.errors.any? %>
  <% if @doc.project.is_secret? %>
    <%= f.collection_check_boxes(:reviewer_ids, @doc.project.disclosed_users.order(:first_name, :last_name), :id, :name_with_job_title) do |b| %>
      <%= b.check_box %> <%= b.label %><br>
    <% end %>
  <% else %>
    <%= f.collection_check_boxes(:reviewer_ids, User.order(:first_name, :last_name), :id, :name_with_job_title) do |b| %>
      <%= b.check_box %> <%= b.label %><br>
    <% end %>
  <% end %>
<% else %>
  Select a project to see reviewers.
<% end %>