remote rails form_tag example and ruby ajax ruby-on-rails-4 respond-to

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.



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.