Отправить несколько форм одной модели, в одном представлении в Rails с JavaScript - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть модель с именем AvaliationInput, эта модель, в основном, имеет право сохранять имя поля отчета, на который кто-то собирается ответить позже.Каждый AvaliationInput связан с Profession.

Итак, у меня есть страница, на которой перечислены все мои avaliation_inputs от конкретной профессии.

Мой контроллер (avaliations_controller.rb):

class Web::V1::Coordinator::AvaliationsController < Web::V1::WebController
  layout "coordinator"
  before_action :authenticate_coordinator_coordinator!
  before_action :get_professions_and_types, only: [:edit, :update]

  # GET 
  def index
    # @avaliations = current_coordinator_coordinator.my_avaliations
    @professions = current_coordinator_coordinator.select_institution_profession
  end

  # GET 
  def edit
    @institution_profession = InstitutionProfession.find(params[:id].to_i)
    @profession_name = @institution_profession.profession.name
    @avaliations = @institution_profession.avaliation_inputs
  end

  # PATCH/PUT 
  def update
    if AvaliationInput.find(avaliation_input_id[:id].to_i).update(avaliation_input_params)
      redirect_to coordinator_avaliations_path, notice: 'Avaliação atualizada com sucesso' and return
    end
    render :edit
  end

  private

    def avaliation_input_params
      params.require(:avaliation_input).permit(:id, :institution_profession_id, :name, :field_type, :required)      
    end
    def avaliation_input_id
      params.require(:avaliation_input).permit(:id)  
    end
end

Мой взгляд (_edit_form.html.erb; он вызывается в edit.html.erb):

<div class="row">
    <div class="col-sm-12 col-md-12">
        <div class="form-group">
            <label class="form-control-label">Profissão</label>
            <h3><%= @profession_name %></h3>
        </div>
    </div>
    <% avaliations.each do |avaliation_input| %>
        <%= form_for avaliation_input, url: coordinator_avaliation_path, method: :put, namespace: "avaliation_input_#{avaliation_input.id}" do |form| %>
            <% if avaliation_input.errors.any? %>
                <div id="error_explanation">
                  <h2><%= pluralize(avaliation_input.errors.count, "error") %> proíbem a finalização:</h2>
                  <ul>
                      <% avaliation_input.errors.full_messages.each do |message| %>
                      <li><%= message %></li>
                      <% end %>
                  </ul>
                </div>
            <% end %>

            <%= form.hidden_field :institution_profession_id, value: @institution_profession.id %>
            <%= form.hidden_field :id, value: avaliation_input.id %>

                <div class="col-sm-12 col-md-12">
                    <div class="form-group">
                        <div class="card">
                            <%=Web::V1::LayoutHelper::badge_active(form.object.active)%>
                            <div class="card-body">
                                <div class="form-group">
                                    <label class="form-control-label">Nome</label>
                                    <%= form.text_field :name, class: "form-control", placeholder: "Nome", required: true %>
                                </div>
                                <div class="form-group">
                                    <label class="form-control-label">Tipo do Campo</label>
                                    <%= form.select :field_type, @types, class: "form-control" %>
                                </div>
                                <div class="form-group">
                                    <label for="cc-payment" class="control-label mb-1">É obrigatório?</label>
                                    <br>
                                    <label class="switch switch-text switch-primary switch-pill">
                                        <%= form.check_box :required, checked: form.object.required, class: "switch-input" %>
                                        <span data-on="SIM" data-off="NÃO" class="switch-label"></span>
                                        <span class="switch-handle"></span>
                                    </label>
                                </div>
                                <div class="form-group">
                                    <% unless form.object.id.nil? %>
                                    <%=Web::V1::LayoutHelper::btn_avaliation_input_active(form.object.active, avaliation_input_active_coordinator_avaliation_path(id: form.object.id))%>
                                    <%end%>
                                </div>
                            </div>
                        </div>
                    </div>                    
                </div>

        <% end %>
    <% end %>
                <div class="col-sm-12 col-md-12">
                    <a href="<%=add_avaliation_input_coordinator_avaliations_path(@institution_profession.id)%>" class="btn btn-lg btn-info">Adicionar Campo</a>
                </div>
</div>
<br>
<div class="row">
    <div class="col-sm-12">
        <a onclick="sendForms()" class="btn btn-lg btn-info" style="width: 100%;">Salvar</a>
    </div>
</div>

<script type="text/javascript">
    var sendForms = function(){
        var formsCollection = document.getElementsByTagName("form");
        for(var i=0;i<formsCollection.length;i++){
           formsCollection[i].submit();
        }
    }    
</script>

Я попрошу вас, ребята, обратить внимание внизупредставление, где я перебираю все формы и отправляю каждую из них.

        var formsCollection = document.getElementsByTagName("form");
        for(var i=0;i<formsCollection.length;i++){
           // alert(formsCollection[i].id);
           formsCollection[i].submit();
        }

Но, когда я делаю это, обновляется только моя последняя форма.На консоли браузера я вижу, что цикл происходит, но на консоли rails (Puma Server) я вижу только последний элемент моих форм.

Я уже пытался использовать пространство имен для своих форм.Я не могу использовать тайм-аут JavaScript, если у меня есть динамическое число форм.

Кто-нибудь знает, как решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...