ActionController:: UnknownFormat
в моем приложении rails у меня есть запрос ajax на сервер, чтобы сохранить некоторые данные. Раньше это работало без проблем, но теперь я получаю сообщение об ошибке:
ActionController::UnknownFormat (ActionController::UnknownFormat):
app/controllers/reservations_controller.rb:45:in `create'
следующим образом является контроллер и мой файл javascript, где я объявляю тип данных JSON
class ReservationController < ApplicationController
respond_to :html, :json
def create
...
respond_to do |format|
if @reservation.save
format.html do
redirect_to '/'
end
format.json { render json: @reservation.to_json }
else
render 'new'
end
end # respond_to
end # create
end # ReservationController
5 ответов
обновить create
действие, как показано ниже:
def create
...
respond_to do |format|
if @reservation.save
format.html do
redirect_to '/'
end
format.json { render json: @reservation.to_json }
else
format.html { render 'new'} ## Specify the format in which you are rendering "new" page
format.json { render json: @reservation.errors } ## You might want to specify a json format as well
end
end
end
вы используете respond_to
метод, но не указание страница. Следовательно, ошибка ActionController::UnknownFormat
.
вы также можете изменить свой config/маршруты.файл RB как:
get 'ajax/:action', to: 'ajax#:action', :defaults => { :format => 'json' }
который по умолчанию будет иметь формат json. Он отлично работает для меня в Rails 4.
или если вы хотите пойти еще дальше, и вы используете пространства имен, вы можете сократить повторы:
namespace :api, defaults: {format: 'json'} do
#your controller routes here ...
end
с вышеуказанным все под /api
по умолчанию будет отформатирован как json.
Ну, я люблю этот пост, потому что я получил аналогичную ошибку. Поэтому я добавил верхнюю строку, как в вашем контроллере respond_to: html,: json
затем я получил другую ошибку (см. ниже)
контроллер уровня respond_to' feature has been extracted to the
ответчики камень. Добавьте его в свой Gemfile, чтобы продолжить использовать эту функцию: gem 'responders', '~> 2.0' обратитесь к руководству по обновлению Rails для получения дополнительной информации.
Но это не имело никакого отношения к делу.
эта проблема произошла со мной и sovled просто добавить
respond_to :html, :json
в файл ApplicationController
вы можете проверить проблемы разработки на Github:https://github.com/plataformatec/devise/issues/2667
есть еще один сценарий, в котором эта проблема воспроизводится (как в моем случае). Когда запрос клиента не содержит правильного расширения на url, контроллер не может определить желаемый формат результата.
например: контроллер установлен в respond_to :json
(как один вариант, без ответа HTML) - в то время как вызов клиента установлен в /reservations
вместо /reservations.json
.
итог, измените вызов клиента на /reservations.json
.