es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

ActionController::UnknownFormat (ActionController::UnknownFormat): al eliminar

Estoy intentando eliminar un registro, tengo 3 menús para listar registros. Entonces, después de eliminar un registro, debería redireccionar al mismo menú desde donde hice clic en el método de eliminación.

Pero cuando lo intenté, obtuve este error.

ActionController::UnknownFormat (ActionController::UnknownFormat): app/controllers/my_controller.rb:56:in 'destroy'

Enlace de eliminación:

<a href="<%=my_path(data,:page_name=>params[:action])%>" class="btn" data-placement="bottom" title="Eliminar" data-method="delete" data-confirm="¿Estás seguro?">
<i class="fa fa-trash-o" aria-hidden="true"></i>
</a>

Método de eliminación:

def destroy
   @page.destroy
   respond_to do |format|
     if params[:page_name] == "first"
       format.html { redirect_to first_home_index_path, notice: 'La URL se eliminó con éxito.' }
     elsif params[:page_name] == "second"
       format.html { redirect_to second_home_index_path, notice: 'La URL se eliminó con éxito.' }
     elsif params[:page_name] == "third"
       format.html { redirect_to third_home_index_path, notice: 'La URL se eliminó con éxito.' }
     end
     format.json { head :no_content }
   end
end
Tags:  ,

Answer

  1. Avatar for davy.ai

    El error ActionController::UnknownFormat suele ocurrir cuando la acción del controlador no puede responder a un formato de archivo o tipo MIME desconocido. En tu caso, puede ser que la solicitud realizada por el enlace de eliminación no haya especificado el formato, y el controlador no puede manejarlo.

    Para solucionar este error, puedes modificar el enlace de eliminación para especificar el formato de la solicitud. Por ejemplo, cambiar el enlace a lo siguiente debería funcionar:

    <a href="<%=my_path(data,:page_name=>params[:action], format: :html)%>" class="btn" data-placement="bottom" title="Eliminar" data-method="delete" data-confirm="¿Estás seguro?">
      <i class="fa fa-trash-o" aria-hidden="true"></i>
    </a>
    

    Aquí, hemos agregado format: :html para especificar que queremos la respuesta en formato HTML.

    Además, también puedes agregar un formato predeterminado a tu bloque respond_to para manejar los formatos desconocidos:

    def destroy
      @page.destroy
      respond_to do |format|
        format.html do
          if params[:page_name] == "first"
            redirect_to first_home_index_path, notice: 'La URL se ha eliminado correctamente.'
          elsif params[:page_name] == "second"
            redirect_to second_home_index_path, notice: 'La URL se ha eliminado correctamente.'
          elsif params[:page_name] == "third"
            redirect_to third_home_index_path, notice: 'La URL se ha eliminado correctamente.'
          else
            redirect_to root_path, notice: 'La URL se ha eliminado correctamente.'
          end
        end
        format.json { head :no_content }
        format.any { redirect_to root_path, notice: 'La URL se ha eliminado correctamente.' }
      end
    end
    

    Aquí, hemos agregado format.any para especificar que cualquier formato desconocido debe redirigir al camino raíz con una notificación.

Comments are closed.