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
function.js
$.ajax({
url: url_link,
dataType: 'json',
type: 'POST',
data: dataToSend
})
Полный журнал ошибок:
Completed 406 Not Acceptable in 45ms
ActionController::UnknownFormat (ActionController::UnknownFormat):
app/controllers/bookings_controller.rb:45:in `create'
Rendered /Users/tiagovieira/.rvm/gems/ruby-2.0.0-p451/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_source.erb (0.5ms)
Rendered /Users/tiagovieira/.rvm/gems/ruby-2.0.0-p451/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb (0.8ms)
Rendered /Users/tiagovieira/.rvm/gems/ruby-2.0.0-p451/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.8ms)
Rendered /Users/tiagovieira/.rvm/gems/ruby-2.0.0-p451/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (9.6ms)
Ответы
Ответ 1
Обновите действие 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
, но anot, определяющий формат , в котором отображается страница new
. Следовательно, ошибка ActionController::UnknownFormat
.
Ответ 2
Вы также можете изменить файл config/routes.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 по умолчанию.
Ответ 3
Хорошо, я люблю этот пост, потому что у меня такая же ошибка.
Поэтому я добавил верхнюю строку, как в вашем контроллере
reply_to: html,: json
тогда я получил другую ошибку (см. ниже)
Контрольный уровень respond_to' feature has been extracted to the
. Добавьте его в свой Gemfile, чтобы продолжить использование этой функции: gem "responseers", "~ > 2.0". Подробнее см. Руководство по обновлению Rails.
Но это не имело к этому никакого отношения.
Ответ 4
Эта проблема произошла со мной и сослалась просто добавить
respond_to :html, :json
в файл ApplicationController
Вы можете проверить проблемы разработки на Github: https://github.com/plataformatec/devise/issues/2667
Ответ 5
Существует еще один сценарий, в котором эта проблема воспроизводится (как в моем случае). Когда ЗАПРОС КЛИЕНТА не содержит правильного расширения на URL-адресе, контроллер не может определить желаемый формат результата.
Например: для контроллера установлено значение respond_to :json
(в качестве единственной опции без ответа HTML) - в то время как для клиентского вызова установлено значение /reservations
вместо /reservations.json
.
В нижней строке измените клиентский вызов на /reservations.json
.