Rails 7 и Turbo: по...
 
Уведомления
Очистить всё

Rails 7 и Turbo: после неудачной отправки формы не видно ошибок

5 Сообщения
4 Пользователи
0 Реакции
681 Просмотры
Валерий40
Сообщения: 33
Автор темы
Читает чужие PR фулстек-разработчик
Присоединился: 4 года назад
[#14]

Новое приложение на Rails 7.0, Turbo из коробки. Форма создания проекта, при ошибке валидации делаю как привык:

def create
  @project = Project.new(project_params)
  if @project.save
    redirect_to @project
  else
    render :new
  end
end

Успешное сохранение работает, а при ошибке страница просто не меняется, ошибок не видно. В консоли браузера Turbo пишет, что ответ на форму должен быть редиректом. Откатываться на rails-ujs?


4 ответа
egorov_s
Сообщения: 5
Дружит с bundler бэкенд-разработчик
Присоединился: 4 года назад

Откатываться не надо, нужно поменять статус. Turbo рисует ответ на отправку формы, только если статус 4xx или 5xx, а render :new по умолчанию отдаёт 200:

if @project.save
  redirect_to @project
else
  render :new, status: :unprocessable_entity
end

После этого форма с ошибками появится на месте. Генератор scaffold в 7.0 уже так делает, можно подсмотреть.


Ответ
2 ответа
Валерий40
Присоединился: 4 года назад

Читает чужие PR фулстек-разработчик
Сообщения: 33

Помогло, спасибо. А с Devise что делать? Там форма входа тоже молчит при неверном пароле, а контроллер не мой


Ответ
kostya.sokurov
Присоединился: 4 года назад

Держит прод бэкенд-разработчик, senior
Сообщения: 73

Обнови Devise до 4.9, он вышел буквально на днях как раз с поддержкой Turbo. В инициализатор после обновления:

# config/initializers/devise.rb
config.responder.error_status = :unprocessable_entity
config.responder.redirect_status = :see_other

И перегенерируй представления, если они у тебя свои.


Ответ
Ксения 90
Сообщения: 18
Пишет тесты QA-автоматизатор
Присоединился: 4 года назад

Системный тест на эту форму, если он есть, тоже мог молча проходить. Проверяйте текст ошибки через have_content, а не отсутствие редиректа


Ответ