В Rails в одной форме Format.js просто не работает. Понятия не имею, почему бы и нет

Раньше это работало, и я не уверен, что это сломало!

У меня есть приложение для выставления счетов, в котором счета принадлежат клиентам. Вы можете создать нового клиента через / обычные клиенты / новый, НО я также создал модальное окно в новой форме счета-фактуры, поэтому, если у вас еще нет клиента для нового счета-фактуры, который вы заполняете, вы можете вызвать модальное окно и создайте нового клиента на месте.

И форма "Счет-фактура", и ее модальное окно "Клиент" использовали FORM_WITH, поэтому Remote автоматически принимает значение True. Затем у меня есть действие Create в моем контроллере Clients, который использует Format.js, и файл create.js.erb в моей папке Client views для обработки Javascript, который вставляет вновь созданное имя клиента в соответствующее поле в New Invoice. форма при закрытии модального окна.

Раньше это работало нормально, но теперь на @client.save действие Create клиентского контроллера всегда перенаправляет на параметр format.HTML в моем блоке Respond_To (следовательно, на страницу показа клиента), а НЕ на страницу create.js.erb.

Что я пробовал

  • Я перепроверил все на предмет опечаток и прочих ошибок.

    Я создал совершенно другой контроллер только для действия Client Create внутри формы Invoice, но он по-прежнему делает то же самое, за исключением того, что он сообщает об ошибке ActionController::UnknownFormat в 'response_to do |format| действия Create | ' блок.

    Отключены новые библиотеки Javascript, которые я установил после завершения функции

Что странно

  • Я использую этот же модальный подход в другой части приложения, чтобы добавить новые электронные письма клиентов в мою форму электронного счета, и он отлично работает!

  • Как я уже говорил, вы ТАКЖЕ можете создавать новых клиентов с помощью обычной формы /clients/new, и для этой формы Local установлено значение True. Но если я удалю Local: True, он успешно отправится с использованием файла format.js контроллера клиентов! Таким образом, ТОЛЬКО мой клиентский модальный form_with внутри формы Invoice, похоже, не может запускать успешный format.js для того же контроллера!

  • Я пробовал принудительно выполнить рендеринг, как вы видите ниже, но он просто загружает файл create.js.erb как текстовый файл, он не выполняет Javascript...

    "@ Client.save render:js => 'client_from_invoices/create.js.erb', layout: false"

Что, как мне кажется, произошло Я начал работать с этой функцией около 5-6 недель назад. С тех пор я добавил библиотеку Javascript/ стимулов для FlatPickr и одну для автозаполнения стимулов. Единственное, о чем я могу думать, это может быть какая-то проблема с моим файлом application.js? Но весь мой другой Javascript работает через приложение, и я отключил эти библиотеки и код, который их вызывает, на всякий случай, и никакого эффекта.

Во всяком случае, это самый упорный баг, с которым я столкнулся. Я нахожусь во втором дне, пытаясь понять это.

ЛЮБАЯ ПОМОЩЬ БОЛЬШОЙ ЦЕНА, спасибо за чтение!!

Действие создания клиента

  def create
    @client = Client.new(client_params)
    @client.user = current_user

    respond_to do |format|
      if @client.save

        format.js

        format.html { redirect_to @client, notice: 'Client was successfully created.' }

        format.json { render :show, status: :created, location: @client }
      else

        format.js

        format.html { render :new }
        format.json { render json: @client.errors, status: :unprocessable_entity }

      end
    end
  end

Модальная форма, которая не работает из формы счета-фактуры

            <%= form_with(model: @client) do |form| %>
              <div class="field">
                <div>
                  <%= form.label :client_name %>
                </div>
                <%= form.text_field :name, class: "border border-gray-400 formfield sm: w-full mb-1 bg-gray-200 h-8 focus:outline-none focus:shadow-outline"%>
              </div>
              <div class="actions mt-3">
                <%= form.submit class:"border border-red-500 font-semibold bg-red-500 hover:bg-red-700 text-white px-3 py-1 text-md rounded-md mr-2" %>
                <button data-controller="color" class="font-poppins border border-gray-600 text-gray-600 hover:text-black hover:border-gray-900 hover:bg-gray-100 px-3 py-1 text-md rounded-md" data-action="click->modal#close color#reset_form_errors">Cancel</button>
              </div>
            <% end %>

Обычная / клиентская / новая форма, которая БУДЕТ работать, когда Local: True отсутствует

<%= form_with(model: client) do |form| %>
blah blah blah 
  <% end %>

0 ответов

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