Я думаю, что главная проблема здесь не в неизвестном формате, а в
шаблон
В показанной вами ошибке ясно, что вы отправляете правильный Content-Type в своем запросе
request.formats: ["application/json"]
И вы указали format.json
в своем действии контроллера.
Так что единственное, что приходит на ум, - это проблема с ответом на ваш запрос. Теперь снова, глядя на сообщение об ошибке, там написано, что вам не хватает шаблона.
ActionController :: UnknownFormat (InscriptionController # создать
отсутствует шаблон для этого формата и варианта запроса
Причина этого заключается в том, что вы не возвращаете json-ответ от действия контроллера
format.json {
allowed_origins = ["https://example.com", "https://example.com.cdn.ampproject.org/", "http://example.com.amp.cloudflare.com", "https://cdn.ampproject.org"]
allowed_source_origin = "https://example.com"
source_origin = params[:__amp_source_origin]
origin = request.headers["Origin"]
response.set_header('Content-type', 'application/json')
response.set_header('Access-Control-Allow-Credentials', 'true')
response.set_header('Access-Control-Allow-Origin', origin)
response.set_header('AMP-Access-Control-Allow-Source-Origin', source_origin)
p response.headers
}
Вам нужно либо визуализировать json
непосредственно из действия контроллера, либо, если вы этого не сделаете,
Rails пытается найти подходящий шаблон для вашего контроллера
действие.
и я думаю, что это главная причина этой ошибки.
Решение:
1. Добавьте оператор рендеринга к вашему действию контроллера
В этом случае вы можете сделать что-то вроде этого:
format.json {
allowed_origins = ["https://example.com", "https://example.com.cdn.ampproject.org/", "http://example.com.amp.cloudflare.com", "https://cdn.ampproject.org"]
allowed_source_origin = "https://example.com"
source_origin = params[:__amp_source_origin]
origin = request.headers["Origin"]
response.set_header('Content-type', 'application/json')
response.set_header('Access-Control-Allow-Credentials', 'true')
response.set_header('Access-Control-Allow-Origin', origin)
response.set_header('AMP-Access-Control-Allow-Source-Origin', source_origin)
p response.headers
render json: {}, status: :ok
}
2. Создайте соответствующий файл вида, чтобы Rails мог его найти
Rails попытается найти файл представления с именем в качестве действия контроллера в имени каталога имени контроллера. Так что в вашем случае, поскольку имя контроллера InscriptionsController
, поэтому ваш файл должен быть
Приложение / просмотров / надписи / create.json
Предложение
В указанной вами ссылке указано
Для запросов от разрешенных источников наш ответ будет содержать
следующие заголовки:
Access-Control-Allow-Origin:
AMP-Access-Control-Allow-Source-Origin:
Заголовки Access-Control-Expose-: AMP-Access-Control-Allow-Source-Origin
Но вы не устанавливаете Access-Control-Expose-Headers
в своем действии создания, которое должно быть установлено для того, чтобы клиент считывал дополнительные заголовки ответа в запросе CORS .
Надеюсь, это поможет.