Inserciones Dinámicas de Notas con AJAX y SJR en Rails

Clase 33 de 36Curso de Introducción a Ruby on Rails

Resumen

¿Cómo integrar comportamiento dinámico utilizando AJAX y SJR?

En el mundo del desarrollo web, el dinamismo es esencial. En Rails, podemos lograrlo usando Server Generated JavaScript Responses (SJR). Este enfoque permite llevar una petición desde nuestro cliente, procesarla en el servidor y devolver un JavaScript que se ejecuta en el cliente, agregando así contenido dinámicamente a nuestro HTML existente. Este ciclo de vida brinda grandes capacidades de interacción dinámica dentro de nuestras páginas web.

¿Cómo estructurar el contenedor de notas en Rails?

  1. Modificar la vista existente: Dirígete a show.html.haml dentro de views/tasks/show. Allí, estructura el contenedor de notas para facilitar la inserción dinámica.

    .nodes
      -# Aquí incluyes el contenido previo, pero dentro de un nuevo div
    
  2. Agregar más datos a las notas: Incorpora detalles como la fecha de creación y el autor de la nota. Usa métodos provistos por Rails para una mejor presentación, como time_ago_in_words.

    %p= time_ago_in_words(node.created_at) + " by " + node.user.email
    %hr/
    

¿Cómo reutilizar el fragmento de código?

Para manejar mejor el código, reutiliza fragmentos comunes utilizando parciales en Rails.

  1. Crear parciales: Crea un parcial llamado node.html.erb dentro de un nuevo directorio views/tasks/nodes.

  2. Refactorizar: Mueve el código deseado al parcial y asegúrate de pasar correctamente las variables necesarias.

    <div class="node">
      <p><%= time_ago_in_words(node.created_at) %> by <%= node.user.email %></p>
      <hr/>
    </div>
    

¿Cómo implementar el concepto de SJR en Rails?

  1. Configurar el controlador: Asegúrate de que la acción create en tu controlador renderice el JavaScript adecuado que el cliente necesita.

    # tasks_controller.rb
    def create
      @node = Node.create(node_params)
      respond_to do |format|
        format.js
      end
    end
    
  2. Crear un archivo de plantilla de JavaScript: En views/tasks/nodes, crea un archivo create.js.erb.

    const parentNode = document.querySelector('.nodes-container .nodes');
    const newNode = document.createElement('div');
    newNode.innerHTML = '<%= j render @node %>';
    
    parentNode.appendChild(newNode);
    document.querySelector('#node_body').value = '';
    window.scrollTo(0, parentNode.scrollHeight);
    

¿Cómo transformar una petición HTML en una petición AJAX?

Para que el envío de datos a través de AJAX funcione correctamente, debemos especificar que el formulario es remoto:

  1. Modificar el formulario: Cambia el formulario en show.html.haml para que use AJAX.

    = simple_form_for @task, remote: true do |f|
      = f.input :body
      = f.button :submit
    

¡Animemos a los responsables a participar!

Al finalizar, podrías considerar mejorar la funcionalidad asegurando que solo los usuarios autorizados, como los responsables de una tarea, puedan añadir comentarios. Rails te facilita el manejo de autorizaciones utilizando gemas como CanCanCan.

¡Aprovecha esta poderosa funcionalidad para darle un toque dinámico y profesional a tus aplicaciones web! Incluye AJAX y SJR en tu repertorio, y observa cómo tus habilidades de desarrollo web se elevan al siguiente nivel.