Rails 5.2: form_with требует "local: false" для запросов AJAX? - PullRequest
0 голосов
/ 03 мая 2018

Я только что обновился с 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, который скопировал бы эти значения конфигурации.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

У меня была такая же проблема после обновления с Rails 5.1 до Rails 5.2

ActionController :: UnknownFormat request.formats: ["text / html"] В контроллере отсутствует шаблон для этого формата и варианта запроса.

form_with submit не работает удаленно. Работает только с локальным: ложный параметр

Вот соответствующие строки из моего config/application.rb файла:

module RailsStarterKit
  class Application < Rails::Application
    config.load_defaults 5.2
0 голосов
/ 03 мая 2018

Проблема заключалась в том, что у меня не было файлов конфигурации обновления из Rails 5.1, которые копировали бы по умолчанию. В конце концов Rails удалил это в 5.1 (или 5.2?) И вместо этого использует config.load_defaults VERSION, который загружает все обновленные конфигурации в указанную версию.

Одна из опасностей, возникающих при обновлении одной версии за раз, менялось с моего обновления с 5.1 до 5.2! Я рекомендую читать все заметки о выпуске для ВСЕХ версий заранее, а не только по одной.

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