Rails: Si necesitas callbacks, workers y estás pensando en arrays de objetos……..aquí te dejo las claves para entenderlo!

rubyonrailsHe estado trabajando en un proyecto express dentro de ASPgems, que consiste en desarrollar una idea y el compromiso de entregarlo en producción en una semana. No sé si otras empresas disponen de esta oportunidad en la que poder participar, pero yo me apunté sin dudarlo, es una experiencia muy buena, ya que te enfrentas a situaciones que en ocasiones los tienes resueltos y este tipo de reto, hace que vuelvas a tener la alerta activa. Os voy a contar en que consiste el proyecto para poder entrar en situación y entender de lo que intento explicar y las soluciones que he aplicado.

La aplicación consiste en saber que gemas está utilizando cada proyecto que se de de alta en la aplicación, por lo que debe disponer de una interfaz de usuario, para dar de alta un nombre de proyecto, una URL del repositorio para poder saber en su Gemfile las gemas que utiliza y leer en RubyGems  más información sobre ellas.

Según estaba planteando los retos de los puntos claves de la aplicación, lo primero que debía solucionar es, cómo interactúa esa interfaz de usuario y el tiempo de proceso que se lleva el disponer de toda la información de lectura del Gemfile, así como el reto en tiempo de ir a buscar cada una de las gemas a Rubygems y conseguir la información adicional de la descripción y el resumen. Esto plantea dos tipos de accesos externos que se necesitan para obtener información, uno al repositorio del proyecto y el otro a Rubygems y eso lleva un coste que hay que medir y tratar.
Seguir leyendo

Anuncios

Algunos detalles que deberías saber sobre ActiveRecord – Rails

Agile Web Development wit RailsActive Record es un de los temas más amplios que dispone Rails, veamos algunos aspectos necesarios para poder estar cómodos. Podríamos decir que Active Record, es una solución al problema de acceder a los datos de una base de datos, en la que cada tabla de la base de datos es una clase, por lo que cada fila es asociada con objetos. Cuando se crea un objeto, se añade una fila a la tabla de la base de datos. Cuando se modifican los atributos del objeto, se actualiza la fila de la base de datos.

Los “callbacks” de ActiveRecord

La primera vez que me encontré con los Callbacks de ActiveRecord pensé en que son el complemento ideal (lo sigo pensando, pero con algún que otro matiz) y que te permiten hacer pequeños trozos de código, “hooks” para complementar el ciclo de vida de un objeto ActiveRecord. Pero también hay como contraposición, por ejemplo, si buscas o hablas con otros desarrolladores sobre “callbacks ActiveRecord”, podríamos llevarnos otra impresión totalmente distinta, incluso si los has usado en algún momento dentro de algún proyecto, puede que incluso hayas tenido la sensación de haber perdido el control de tu código. No quiero decantarme sobre “sí a los callback” o “no a los callback”, creo que deben ser utilizados a conciencia y de hecho he hablado con otros compañeros desarrolladores, sobre si los utilizan, tienen la misma sensación, hay que tener cuidado y con conciencia de uso, además personalmente pienso que los callbacks son como “la fuerza sin control no sirve de mucho”.

Las acciones se pueden llevar a cabo son “before”, “after”, o incluso “around” de los eventos de ActiveRecord, como “save“, “validate“, o “create“. Además, los callbacks son acumulativas, lo que puedes tener dos acciones que ocurren como before_update , y se ejecutarán en el orden en que se producen.
Seguir leyendo

Mi guía para especificar las relaciones en los modelos: Active Record – RubyOnRails

Beer on RailsEn esta guía de referencia, quiero hablar sobre las relaciones en los modelos de RubyOnRails, que además considero que hay que tener las ideas y los conceptos muy claros para poder trabajar con soltura. Nuestro protagonista de esta sesión es Active Record. Cuando venimos de otros lenguajes y modelados de Bases de Datos en los que uno mismo tiene que pensar en muchos detalles y como todo, en un primer encuentro, incluso en alguno que otro más con Active Record, tienes que cambiar la forma de pensar y de aprender. Pues como digo, hay que cambiar la forma de pensar y enfocar las relaciones para que no tengas confusiones y esto te lleve a problemas, hay pensar que estamos tratando con objetos de modelo y sus relaciones y no con filas y columnas ya que parte de la magia de ORM es que puede convertir las relaciones de clave externa hacia otra tabla referenciada Foreign Key en mapeos entre objetos de alto nivel o un lenguaje natural y ayudar a que Active Record entienda las relaciones que queremos abordar en nuestra Base de Datos.

Para eso tenemos las relaciones mediante claves externas que hacen que ORM entienda como se ven entra ellas y como podemos nosotros circular entre esas relaciones. Pongamos un ejemplo, si tenemos una tabla Productos y otra Categorías en la que necesitamos una tercera tabla denominada “Tabla de Unión”, para relacionar ambos modelos de Productos y Categorías en la que tendremos por convención las claves id de ambas tablas, product_id y category_id, para que pueda relacionarlas RubyOnRails con ORM. La convención de nomenclatura Active Record dice que la columna clave externa debería llamarse después del nombre de la tabla destino y añadiendo el guión bajo más el id, tal como hemos visto anteriormente.

Es importante pensar en los índices que creemos para no ralentizar las búsquedas y por otro lado, en el caso de que utilicemos otros nombres que no sea capaz de reconocer automáticamente, deberemos declarar las Foreign Key, Seguir leyendo