ActionController:: Unknown Format
dans mon application rails j'ai une requête ajax au serveur, pour stocker quelques données. Cette habitude de travailler sans aucun problème, mais maintenant j'ai une erreur:
ActionController::UnknownFormat (ActionController::UnknownFormat):
app/controllers/reservations_controller.rb:45:in `create'
comme suit est le contrôleur et mon fichier javascript où je déclare le type de données do être 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
fonction.js
$.ajax({
url: url_link,
dataType: 'json',
type: 'POST',
data: dataToSend
})
le journal des erreurs complet est:
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)
5 réponses
mise à Jour create
action comme ci-dessous:
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
Vous utilisez respond_to
méthode mais anot spécifiant le format où new
la page est rendue. Par conséquent, l'erreur ActionController::UnknownFormat
.
vous pouvez aussi modifier votre config/routes.rb fichier de la forme:
get 'ajax/:action', to: 'ajax#:action', :defaults => { :format => 'json' }
qui va par défaut le format à json. Il fonctionne très bien pour moi dans les Rails 4.
Ou si vous voulez aller encore plus loin et que vous utilisez les espaces de noms, vous pouvez couper les doublons:
namespace :api, defaults: {format: 'json'} do
#your controller routes here ...
end
avec le au-dessus de tout sous /api
sera formaté comme json par défaut.
Eh bien j'aime ce post parce que j'ai eu une erreur similaire. J'ai donc ajouté la ligne du haut, comme dans votre contrôleur respond_to: html,: json
puis j'ai eu un autre message d'erreur(voir ci-dessous)
le niveau du contrôleur respond_to' feature has been extracted to the
le joyau des intervenants. Ajoutez-le à votre fichier Gemfile pour continuer à utiliser cette fonctionnalité: gem 'responders', '~> 2.0' consultez le guide de mise à niveau des Rails pour plus de détails.
Mais cela n'a rien à faire avec elle.
ce problème est arrivé avec moi et sovled par Juste ajouter
respond_to :html, :json
pour ApplicationController fichier
Vous pouvez Vérifier l'Concevoir des questions sur Github: https://github.com/plataformatec/devise/issues/2667
il y a un autre scénario où cette question se reproduit (comme dans mon cas). Lorsque la requête CLIENT ne contient pas la bonne extension sur l'url, le contrôleur ne peut pas identifier le format de résultat désiré.
par exemple: le controller est défini à respond_to :json
(en option simple, sans réponse HTML)- alors que l'appel client est défini à /reservations
au lieu de /reservations.json
.
au bout du compte, changez l'appel du client en /reservations.json
.