Ошибка запроса на обновление формы редактирования Rails (турбо-кадры)

Когда я пытаюсь обновить службу и отправить все обновления, кроме имени, которое отправляется в запрос SQL со старым значением.

Форма редактирования: https://stackru.com/images/238263e5376da3b79f5619959de33c285a4b40b0.png

Если я отправлю это, я получу следующее:

            ↳ app/controllers/services_controller.rb:133:in `block in update'
  Service Exists? (5.4ms)  SELECT 1 AS one FROM `services` WHERE `services`.`name` = 'Tratamento 2' AND `services`.`id` != 2 LIMIT 1
  ↳ app/controllers/services_controller.rb:133:in `block in update'
  Service Exists? (3.9ms)  SELECT 1 AS one FROM `services` WHERE `services`.`ref` = 'test' AND `services`.`id` != 2 LIMIT 1
  ↳ app/controllers/services_controller.rb:133:in `block in update'
  Service Update (3.9ms)  UPDATE `services` SET `services`.`ref` = 'test', `services`.`description` = 'test', `services`.`updated_at` = '2021-12-29 11:05:20.531023' WHERE `services`.`id` = 2

ref получает новое значение, но name ищите "Tratamento 2" (старое значение).

/services/_edit.html.erb

      <%= turbo_frame_tag :edit_service_details do %>
  <div data-controller="unblind-modal">
    <div data-unblind-modal-target="background" data-popup-confirm-delete-target="background" class="modal-background" style="z-index: 9998;"></div>
    <div data-unblind-modal-target="content" data-target-modal="edit_details" class="fixed inset-0 overflow-y-auto flex items-center justify-center m-6" style="z-index: 9999;">
      <%= form_with model: @service, url: polymorphic_path([@service], { business_id: @service.business.id }), class: " relative w-full flex flex-col items-center justify-center overflow-auto bg-white rounded-lg max-w-screen-sm" do |form| %>
        <div class="w-full sticky top-0 flex items-center">
          <div class="mx-6 py-4 w-full flex justify-between items-center">
            <h1 class="txt_heading text-neutral-100 text-neutral-80">Edit Details</h1>
            <div data-action="click->unblind-modal#close" data-target-modal="edit_details" class="btn-secondary btn-md flex items-center w-9 px-0 justify-center">
              <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
                <path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M6 18L18 6M6 6l12 12"/>
              </svg>
            </div>
          </div>
        </div>
        <div class="w-full h-auto flex flex-wrap md:flex-nowrap overflow-auto">
          <div class="w-full overflow-auto">
            <div class="px-6 pb-4 overflow-auto space-y-4">
              <div class="space-y-1 w-full">
                <%= form.label :ref, :Reference, class: "input-label" %>
                <%= form.text_field :ref, placeholder: :reference, autofocus: true, class: "text-field input-md w-1/2" %>
                <% unless @service.errors[:ref].empty? %>
                  <div class="flex space-x-1 ">
                    <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 text-error" viewBox="0 0 20 20" fill="currentColor">
                      <path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"/>
                    </svg>
                    <span class="txt_caption text-error ">The reference field <%= @service.errors[:ref].first %></span>
                  </div>
                <% end %>
              </div>
              <div class="space-y-1 w-full">
                <%= form.label :name, class: "input-label" %>
                <%= form.text_field :name, placeholder: :name, autofocus: true, class: "text-field input-md w-full" %>
                <% unless @service.errors[:name].empty? %>
                  <div class="flex space-x-1">
                    <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 text-error" viewBox="0 0 20 20" fill="currentColor">
                      <path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"/>
                    </svg>
                    <span class="txt_caption text-error ">The first name field <%= @service.errors[:name].first %></span>
                  </div>
                <% end %>
              </div>
              <div class="space-y-1 w-full">
                <%= form.label :description, class: "input-label" %>
                <%= form.text_area :description, rows: 3, placeholder: :description, class: "text-field w-full" %>
                <% unless @service.errors[:description].empty? %>
                  <div class="flex space-x-1">
                    <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 text-error" viewBox="0 0 20 20" fill="currentColor">
                      <path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"/>
                    </svg>
                    <span class="txt_caption text-error ">The last name
                        field <%= @service.errors[:description].first %></span>
                  </div>
                <% end %>
              </div>
            </div>
          </div>
        </div>
        <div class="w-full sticky bottom-0 flex items-center">
          <div class="mx-6 py-4 w-full h-full flex justify-end items-center">
            <%= form.submit "Save", class: "btn-primary btn-md", disabled: false %>
          </div>
        </div>
      <% end %>
    </div>
  </div>
<% end %>

services_controller.rb

      def update
    respond_to do |format|
      if @service.update(service_params)
        flash.now[:success] = ["The Service " + @service.name + " was updated"]
        format.turbo_stream {
          render turbo_stream: [
            turbo_stream.update("flash", partial: "flash"), #Show Notification
            turbo_stream.update("show_service_" + @service.id.to_s, partial: "show", locals: { service: @service }),
            turbo_stream.update("edit_service_details"),
            turbo_stream.update("edit_service_categories"),
            turbo_stream.update("edit_service_variants"),
          ]
        }
      else
        flash.now[:error] = ["The Service " + @service.name + " had an error."]
        format.turbo_stream {
          render turbo_stream: [
            turbo_stream.update("flash", partial: "flash")
          ]
        }
      end
    end
  end

0 ответов

Другие вопросы по тегам