form_tag - ruby and rails documentation
ActionController::UnknownFormat (5)
En mi aplicación de rieles, tengo una solicitud de ajax al servidor para almacenar algunos datos. Esto solía funcionar sin ningún problema, pero ahora recibo un error:
ActionController::UnknownFormat (ActionController::UnknownFormat):
app/controllers/reservations_controller.rb:45:in `create''
El siguiente es el controlador y mi archivo javascript donde declaro que el tipo de datos es 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
})
El registro de error completo es:
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)
Actualice la acción de create
siguiente manera:
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
Está utilizando el método respond_to
pero no especifica el formato en el que se representa una página new
. Por lo tanto, el error ActionController::UnknownFormat
.
Bueno, me gusta esta publicación porque recibí un error similar. Así que agregué la línea superior como en tu controlador respond_to: html,: json
luego recibí un error diferente (ver abajo)
La respond_to'' feature has been extracted to the
del nivel de respond_to'' feature has been extracted to the
gema del respondedor. Añádelo a tu Gemfile para continuar usando esta función: gem ''responders'', ''~> 2.0'' Consulta la guía de actualización de Rails para más detalles. Pero eso no tuvo nada que ver con eso.
Este problema me sucedió y me sopló solo por agregar
respond_to :html, :json
al archivo ApplicationController
Puede verificar problemas de diseño en Github: https://github.com/plataformatec/devise/issues/2667
Hay otro escenario donde se reproduce este problema (como en mi caso). Cuando LA PETICIÓN DEL CLIENTE no contiene la extensión correcta en la url, el controlador no puede identificar el formato de resultado deseado.
Por ejemplo: el controlador está configurado para respond_to :json
(como una única opción, sin una respuesta HTML), mientras que la llamada del cliente está configurada en /reservations
lugar de /reservations.json
.
En /reservations.json
, cambie la llamada del cliente a /reservations.json
.
También puede modificar su archivo config / routes.rb como:
get ''ajax/:action'', to: ''ajax#:action'', :defaults => { :format => ''json'' }
Que será el formato predeterminado para json. Me está funcionando bien en Rails 4.
O si desea ir más allá y está utilizando espacios de nombres, puede reducir los duplicados:
namespace :api, defaults: {format: ''json''} do
#your controller routes here ...
end
con lo anterior, todo en /api
se formateará como json de manera predeterminada.