Rails не распознает MIME-тип при отправке формы с помощью JavaScript - PullRequest
0 голосов
/ 14 октября 2019

У меня есть следующий шаблон, delinquent_statuses.html.erb:

<h2>Edit Delinquent Statuses</h2>

<script>
$(document).ready(function() {
    $("select#resident_id").change(function() {
        $("#unit_id").val(this.value);
        this.form.submit();
    });

    $("select#unit_id").change(function() {
        $("#resident_id").val(this.value);
        this.form.submit();
    });
});
</script>

<%= render partial: 'shared/tcpf_selector', locals: {ctrlr: 'leases', action: 'delinquent_statuses'} %>
<hr>

<%= form_with url: 'dq_get_delinquent', remote: true do |f| %>
    <table>
        <tr>
            <td><%= f.label 'Name' %></td>
            <td><%= f.select(:resident_id, options_for_select(@resident_selects),
                             { include_blank: true, tabindex: 1, required: 'required'}) %></td>
            <td><%= f.label 'Apt #' %></td>
            <td><%= f.select(:unit_id, options_for_select(@unit_selects),
                             { include_blank: true, tabindex: 2}) %></td>
        </tr>
    </table>
<% end %>

<div id="dq_selector_field">
</div>

Клиент хочет, чтобы селекторы для @resident_selects и @unit_selects синхронизировались, поэтому их значения - это идентификаторы третьей связанной модели,Lease. Чтобы синхронизировать селекторы, мне нужен приведенный выше javascript.

Проблема в том, что я не могу получить respond_to, чтобы распознать формат, когда я отправляю форму через js. Метод контроллера выглядит следующим образом (и я знаю, что есть другие проблемы со стилем, но по одному):

  def dq_get_delinquent
    id = params.dig(:resident_id) || params.dig(:unit_id)
    @lease = Lease.find_by_id(id)

    respond_to do |format|
      if @lease.present?
        format.js
        format.json
      else
        redirect_to '/'
      end
    end
  end

Но если я пытаюсь запустить это, я получаю ошибку:

ActionController :: UnknownFormat в LeasesController # dq_get_delinquent

Я знаю, что js (и, следовательно, 'text / javascript') не неизвестен, потому что другие формы успешно его используют. Это единственная форма, которую мне нужно отправить таким способом, и я не знаю, как предоставить leases#dq_get_delinquent информацию, которая ему нужна, чтобы он знал, что я ищу шаблон javascript.

(Я пытался использовать render, чтобы отобразить ds_get_delinquent, но это заменяет всю страницу: не то, что я хочу.)

Кто-нибудь знает способ удовлетворения respond_to отне-Rails-сгенерированное событие submit() событие?

(ОБНОВЛЕНИЕ: я попытался добавить request.format = :js, и, по крайней мере, он распознает формат, но теперь Rails просто переписывает экран и печатает интерполированное .js.erb наона.)

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