Quiero agregar algunos datos de la aplicación móvil para mi aplicación rails usando Json, Se trabaja muy bien, si puedo usar el método GET, pero cuando me puse con el método POST es dar error «status»:»422″,»error»:»Unprocessable Entidad».

La ruta es

resources :photomsgs, :defaults => { :format => 'json' }

Mi Controlador es

def create
  @photomsg = Photomsg.new(photo_params)

 respond_to do |format|
  if @photomsg.save
    format.json { render json: @photomsg, status: :created }
    format.xml { render xml: @photomsg, status: :created }
  else
    format.json { render json: @photomsg.errors, status: :unprocessable_entity }
    format.xml { render xml: @photomsg.errors, status: :unprocessable_entity }
  end
end
end 

  def photo_params
    params.require(:photomsg).permit(:title, :physician, :patient)
  end

Estoy usando este Json url http://infinite-depths-5848.herokuapp.com/photomsgs

  • Simplemente significa que el nuevo modelo no podía ser salvo. Intente comprobar que el modelo es válido antes de guardar, y que todos los photo_params están presentes.
  • ¿Has comprobado mi Json url, es correcto para crear el método? infinite-depths-5848.herokuapp.com/photomsgs
InformationsquelleAutor user2993454 | 2015-03-12

7 Comentarios

  1. 5

    Este post ha sido un tiempo, pero me tropecé con él hoy en día porque me había parecido el error, mientras que haciendo un post para mi json extremo. Lo que voy a publicar aquí la solución para ayudar a alguien más en el futuro.

    El error en los registros cuando esto sucede es ActionController::InvalidAuthenticityToken….

    Para que se resuelva esto, he añadido:

    skip_before_action :verify_authenticity_token, si: :json_request?

    a la derecha en la parte superior del controlador, y se definen los json_request método de la siguiente manera:

    protegido

    def json_request?
    solicitud.formato.json?

    final

  2. 3

    Como dijo @joe-van-dyk parece algún tipo de error en la validación.

    Proceder de esta manera, el uso de byebug para depurar el código y buscar los mensajes de error en el modelo.

    def create
      @photomsg = Photomsg.new(photo_params)
    
     respond_to do |format|
      if @photomsg.save
        format.json { render json: @photomsg, status: :created }
        format.xml { render xml: @photomsg, status: :created }
      else
        byebug
        # => @photomsg.errors.messages
        format.json { render json: @photomsg.errors, status: :unprocessable_entity }
        format.xml { render xml: @photomsg.errors, status: :unprocessable_entity }
      end
    end
    end 
    
      def photo_params
        params.require(:photomsg).permit(:title, :physician, :patient)
      end
    • Trabajo fino que me envíe los datos de las guías de la página web (Formulario), Pero cuando voy a enviar los datos del Iphon a través de Json en infinite-depths-5848.herokuapp.com/photomsgs mediante el método post Es dar error.
    • Su JSON no está formateado correctamente. Tal vez usted no está utilizando la tecla derecha de los nombres.
  3. 0

    Comprobar su validaciones y asegúrese de que los datos que se están publicando cumple con las validaciones.

    • Nunca he utilizado ningún tipo de validación en mi modelo, mi modelo es el aspecto: clase Photomsg < ActiveRecord::Base #attr_accessible :photomsg, :image_data, :imagen final
  4. 0

    Comprobar su Photomsg modelo. Tengo el mismo error cuando yo era usar ActiveRecord asociación para una tabla que no existe(puede tratarse de un error tipográfico).

    Por ejemplo, considere las siguientes tablas
    Rails4

    Y el siguiente código de modelo

    class User < ApplicationRecord
      has_many :posts
    end
    
    class Post < ApplicationRecord
      belongs_to :user
      belongs_to :author
    end

    Aviso en el modelo Post estoy referencia a un Autor modelo, pero los puestos de la tabla no tiene author_id columna. Cuando intenta crear entradas utilizando el modelo Post rieles arroja el error «422 Unprocessable la Entidad». Sólo la eliminación de la belongs_to asociación que no existe debe resolver el problema.

  5. 0

    En mi caso fue pasando por las llamadas AJAX de rails. He incluido este en mi application.js document.ready función para resolver el problema.

    $.ajaxSetup({
            headers:
                { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }
        });
  6. 0

    Este problema está relacionado con el token csrf. csrf token se utiliza principalmente para proteger a los no válidos del envío del formulario para que el usuario no será capaz de enviar los datos del formulario desde fuera de la aplicación rails.

    Hay dos maneras de resolver este problema.

    Opción 1: Quitar csrf la validación del controlador actual.

    skip_before_action :verify_authenticity_token

    Añadiendo por encima el código en el controlador va a saltar csrf de verificación en el controlador. Pero no es recomendable ya que nadie va a ser capaz de enviar datos del evento desde fuera de la aplicación rails si usted está utilizando esta opción, asegúrese de añadir más de validación.

    Opción 2: Añadir token CSRF en su solicitud.
    Otra opción para resolver este problema se puede agregar token csrf en el formulario personalizado o a su petición ajax.

    Paso:1 Si usted no está utilizando cualquier diseño que usted puede simplemente añadir csrf en el formulario mediante código de abajo. Si usted está usando la presentación, asegúrese de comprobar cabeza Rails por defecto agregar csrf en la cabeza.

    <%= csrf_meta_tags %>

    este código se agrega token csrf si usted no está usando la presentación.

    Paso:2 En su petición ajax añadir a continuación el código.

     $.ajax({
           type: "post", 
           beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))},
           url: "/form_submit/<%= @form.id %>" ,
           data: form_data, 
           success: function(data, textStatus, jqXHR){ 
              console.log("this is success");
           },
           error: function(jqXHR, textStatus, errorThrown){
    
           }
         });

Dejar respuesta

Please enter your comment!
Please enter your name here