Я только что обновился с Rails 5.1 до 5.2. У меня хорошее тестовое покрытие с приложением, которое выпускалось в течение нескольких месяцев без проблем.
Я уже несколько месяцев использую form_with
с Rails 5.1. Значение по умолчанию для form_with
состоит в том, что все формы по умолчанию являются AJAX и должны быть указаны local: true
, чтобы иметь нормальные запросы HTTP POST.
После обновления до Rails 5.2 (я следовал рекомендациям по обновлению), я столкнулся с ситуацией, когда некоторые из моих форм больше не отправляются как запросы AJAX, если я специально не добавляю к ним local: false
.
Прокрутите до конца фрагмента кода, чтобы увидеть дополнительный local: false
, который работает. Код взят прямо из приложения без изменений.
# This will not work and submits a normal HTTP POST
<%= form_with model: @team_member_type, url: [:settings, @team_member_type], class: "dialog-container", id: "team_member_type-dialog", data: { closable: "false" } do |form| %>
# This will work and submits an AJAX request
<%= form_with model: @team_member_type, url: [:settings, @team_member_type], class: "dialog-container", id: "team_member_type-dialog", data: { closable: "false" }, local: true do |form| %>
Когда я отправляю форму БЕЗ декларации local: false
, я получаю:
Authenticated::Settings::TeamMemberTypesController#create is missing a template for this request format and variant. request.formats: ["text/html"] request.variant: []
Опять же, единственное изменение, которое я делаю, - это добавление local: false
в форму вручную, чтобы сделать ее удаленной.
В документах говорится, что local: false
является по умолчанию , поэтому мне не нужно было указывать его вручную.
Что мне здесь не хватает?
Обратите внимание, что ссылки AJAX с remote: true
работают просто отлично; только формы, которые не отправляют AJAX по умолчанию.
Обновление
Выполняя некоторые раскопки, похоже, что это может быть проблемой, когда я обновился до 5.1. Я не смог найти файл config/initializers/new_framework_defaults_5_1.rb
, и у него был бы флаг по умолчанию, чтобы установить form_with
для удаленного доступа. Так как этот файл не существовал, когда я обновил до 5.2, он не перенес эти новые настройки по умолчанию. Я обновлю этот вопрос, если проверю, что это действительно была проблема.
Обновление 2
Да, проверил, что проблема в том, что у меня не было файла config/new_framework_defaults_5_1.rb
, который скопировал бы эти значения конфигурации.