Rails: обновить значения в collection_select после отправки формы AJAX - PullRequest
0 голосов
/ 06 апреля 2019

У меня есть форма для создания нового задания.Одно из полей формы «Задача» - это лицо, ответственное за задание.

Если при добавлении формы задания необходимо добавить нового лица в базу данных, я могу открыть модальное окно, котороеФорма для создания нового Человека.Это работает нормально и фиксирует изменения в базе данных, а затем закрывает модальное поле, однако поле Person (которое является collection_select) не обновляется, пока я не обновлю всю новую форму Task.

Вот код, используемый дляновая форма задачи (_form.html.erb в представлении задач):

<div class='row'>
            <div class='col-xs-12'>
                <%= form_for(@task, :html => {class: "form-horizontal", role: "form"}) do |f| %>

                    <div class="form-group">
                        <div class="control-label col-sm-2">
                            <%= f.label :task_name %>
                        </div>
                        <div class="col-sm-8">
                            <%= f.text_field :task_name, class: "form-control", placeholder: "Name of the task", autofocus: true %>
                        </div>
                    </div>



                    <div class="form-group">
                        <div class="control-label col-sm-2">
                            <%= f.label :person_id %>
                        </div>
                        <div class="col-sm-8">
                            <%= f.collection_select :person_id , current_user.people.order(:last_name), :id, :last_name, {prompt: "Select a person"}, {class: "form-control"} %>
                        </div>
                        <div id="new-person">
                            <!-- <%= link_to '<i class="glyphicon glyphicon-plus"></i>'.html_safe, new_person_path, class: "btn btn-xs btn-info", remote: true %> -->
                            <!-- Button trigger modal -->
                            <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
                              Create new person
                            </button>

                        </div>
                    </div>


                    <div class="form-group">
                        <div class="col-sm-offset-2 col-sm-10">
                            <%= f.submit class: 'btn btn-primary btn-lg' %>
                        </div>
                    </div>
                <% end %>

                <div class="col-xs-4 col-xs-offset-4">
                    [ <%= link_to "Cancel and return to tasks listing", tasks_path %> ]
                </div>
            </div>
        </div>




<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Create New Person</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        <%= render 'people/form' %>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

А вот мой код для people_controller.rb

  def new
    @person = current_user.people.build
  end

  def edit
    @person = current_user.people.find(params[:id])
  end

  def create
    @person = current_user.people.build(person_params)
    respond_to do |format|
      if @person.save
        format.js
        format.html { redirect_to people_path }
        flash[:success] = "Person was saved successfully"
      else
        format.html {render :new }
      end    
    end
  end

А вот код дляФайл create.js.erb в представлениях People:

$('#exampleModal').hide();
$('.modal-backdrop').remove();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...