Прерывистая ошибка ActionController :: UnknownFormat в удаленной форме с Rails 5 - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть form_with, который отправляет удаленно и отлично работает почти для всех. Однако время от времени пользователь получает эту ошибку:

ActionController::UnknownFormat: TestimonialsController#create is missing a template for this request format and variant.

request.formats: ["text/html"]
request.variant: []

Вид:

<%= form_with(model: [@event, @testimonial]) do |form| %>
...
<% end %>

Действие:

def create
  @testimonial = @event.testimonials.find_or_initialize_by(user: Current.user)
  @testimonial.assign_attributes testimonial_params.merge({status: :pending})
  @testimonial.save
end

Ответ:

Он находится в файле с именем create.js.erb

Вопрос: Я искал повсюду, но я не представляю, почему некоторые пользователи запрашивают HTML вместо JS, то есть то, что получает любой другой пользователь. Что мне не хватает? Я действительно не хочу поддерживать ответы HTML.

1 Ответ

0 голосов
/ 02 ноября 2018

Ваш сервер может получать запросы в разных форматах и ​​пытаться их соответственно обрабатывать:

  • GET www.my_server.com/resource.html
  • GET www.my_server.com/resource.json
  • или странный формат GET www.my_server.com/resource.what

Это желаемое поведение в Rails. Посмотрите этот вопрос о том, как изменить формат по умолчанию для ваших маршрутов, или вы можете изменить их все, чтобы они имели тип json в вашем ApplicationController:

class ApplicationController < ActionController::Base
  before_action :set_default_response_format

  protected

  def set_default_response_format
    request.format = :json
  end
end

Важная строка - request.format = :json, которую можно использовать только в одном контроллере или в одном из его действий.

Если вы хотите, чтобы ваш код всегда отвечал на json, то вы можете взглянуть на Использование Rails для приложений только для API

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