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.