Aclaremos los conceptos entre dos mundos: blank? y present? es Rails / empty? y nil? es Ruby

rubyonrails Hay momentos en los que llevamos mucho tiempo trabajando en proyectos de Ruby on Rails y perdemos la noción de la frontera ente dónde se encuentra cada cosa que utilizamos. A mí me ha pasado alguna vez, en ese caso es mejor parar y pensar por  un momento. También en alguna que otra ocasión he oído que no se entendía y/o sabía la diferencia o que siempre utilizo este método que me funciona siempre. Por esto me gustaría escribir este post para aclararlo.

Por tanto, si alguna vez has trabajado en proyectos Rails, seguramente estos métodos que voy a contar, te suenen e incluso los has utilizado en alguna ocasión, pero no te has parado a pensar el motivo de ¿porqué debo utilizarlos, qué es mejor, cuándo, dónde, alguna ventaja especial? así como algunas curiosidades que voy a explicar. Seguir leyendo

Anuncios

Rails 4: el utilizar o no inverse_of en mis relaciones ¿qué me implica? y ¿cómo afecta la versión de Rails 4.0 y 4.2?

rubyonrailsEn algún momento de nuestros proyectos hemos utilizado inverse_of, pero me pregunto ¿nos hemos detenido a investigar todas sus posibilidades? y ¿qué ocurre si cambio de versión en mi proyecto y no lo tengo claro? , ¿qué problemas me puedo encontrar? cuidado!, tienes que considerar ciertos aspectos de los que vamos a ver en este post. Voy a explicar el uso de inverse_of en la versión 4.0 de Rails y cómo se comporta también en estos casos con la versión Rails 4.2 :inverse_of (puedes ver este pull request). Existen varios casos en los que un inverse_of debes saber utilizarlo y yo te explico cómo puedes entenderlo y aplicarlo. Seguir leyendo

Rails: Selección de menús dinámicos dentro de Active Admin

rubyonrails Actualmente estoy desarrollando un nuevo proyecto de Ruby on Rails,  versión 4 de Rails y versión 2 de Ruby. En esta ocasión quería compartir una parte que he tenido que desarrollar y en la que he encontrado mucha materia pero que no me ha ayudado en esta ocasión demasiado.

El problema

En la parte del backoffice de un portal para la que estoy trabajando para nuestro cliente, estoy utilizando Active Admin. El caso es que esta es una particularidad a la hora de hacer las cosas, en este caso tengo una serie de select independientes de País, Cuidad y Población. Cuando tienes que seleccionar cada uno de ellos individualmente los seleccionas, esto es un poco feo por decirlo de alguna manera. Lo suyo sería una vez que secciones el País, deberían seleccionarse cada una de las provincias y ciudades, en un orden alfabético, después ya si necesitas una provincia concreta, haces la sección de la provincia y automáticamente te selecciona las poblaciones. Una vez dicho esto, parece fácil el desarrollo de la solución, te pones a ver que hay de ejemplos y encuentras muchos recursos unos mejores y otros muy poco útiles. Por eso me he puesto a explicar que solución he desarrollado, por si te encuentras en esta situación tengas un punto dónde poder tener los pasos de la solución y para ello voy a explicarlo lo mejor posible. Por ejemplo he visto un railscasts sobre este tema un poco viejo aunque hay una de pago actualizada, pero lo fuentes están aquí, en stackoverflow también hay mucho pero te dejo algunos de los que he visto, como este y este otro también por si te son de utilidad.
Seguir leyendo

Conferencia Baruco – Barcelona Ruby Conference 2014

ruby_barucoEste año he querido estar en la Baruco para comprobar de primera mano lo que tantas veces he escuchado de otros sobre ella, además tenía ganas de asistir y así tener mi propia opinión. Quiero agradecer a ASPgems que me haya dado esta oportunidad de disfrutarla, gracias!!.

Este Jueves 11 de Septiembre del 2014, Martín, Rebeca, Andrés y yo de ASPgems, hemos asistido a la Baruco 2014, una conferencia en la que puedes conocer a las personas con los que hablas/opinas/escuchas y a las empresas del mundo Ruby. Tal y como hemos ido comentando por twitter, opinión, comentarios, etc de cada uno de nosotros, en mi caso pude conocer a mucha gente, que es lo que me encantó, pero en especial algunos que no conocía y a otros, ya nos conocíamos en persona. Allí me pude encontrar con Xavi NoriaPat Shaughnessy que tenía ganas de conocerlo en persona, Yukihiro Matsumoto ….. mis compañeros (en tono de broma) me comentaron que era una persona muy bien relacionada por codearme con ellos :), la verdad son gente muy cercana y además saben mucho!!. Así que he podido vivir y escuchar de primera mano todo lo que se está cociendo en torno al lenguaje de programación Ruby. La organización ha sigo genial por parte de @codegram y un pleno total de asistentes. Seguir leyendo

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

Ruby: una breve explicación sobre each / for y su scope – un secreto que deberías saber

learningRuby En el curso de Rails que estoy dando, junto con Gaby en la plataforma Neurodidactika de ASPgems, he visto necesario comentar algunas cosas interesantes de sobre for y sobre each. Son dos bucles (loops) que cuando has trabajado con otros lenguajes de programación puedes pensar que puedes utilizarlo indistintamente, pero te voy a enseñar algunas cosas que deberías saber antes de tomar una decisión de utilizar for o each.

Todo parte desde el punto en que ves en la vista index de products, el código para poder ver todos los productos. Pare ello, necesitamos iterar sobre nuestra variable de instancia con un bucle each: @products.each do |product| y pensar que también lo podemos hacer con un for sin problemas y es cierto, ya que utilizamos una variable de instancia @products. Pero veamos las diferencias que deberías tener presente.

En primer lugar voy a hablarte de for. Cuando trabajamos con un for, lo primero que tienes que saber es que la variable que declaramos para utilizar un for, es necesario saber dónde comienza y cuándo termina. es decir, el scope de dicha variable.
Seguir leyendo

Ordenando las Vistas (View) y utilizar Decoradores (Decorator) – Rails

Hey look!En este post hablé sobre el patrón Pattern Decorator” como una alternativa a los callbacks en los casos en que necesariamente nos implicaban en tareas que deberían ser separadas de nuestra lógica y comentaba que si pensamos en uno de los principios de SOLID Design Principles y concretamente en “Single Responsibility Principle”, en la que nos dice que un objeto sólo debería tener una única responsabilidad, en ese caso deberíamos pensar en aplicar el patrón “Pattern Decorator”, en vez de un callback.

Dicho esto, en esta otra ocasión quería hablar del mismo patrón pero aplicado a las vistas.

Piensa en los casos que tenemos Vistas en las que tenemos demasiada lógica dentro y cómo los Decorator (Decoradores) pueden ayudarnos a ordenar la vista y trasladar la lógica para que sea algo más mantenible. En esta ocasión he tomado como ejemplo de código un Railcast que utiliza Draper que me va muy bien para explicarlo. Seguramente que en alguna que otra ocasión, nos vamos a encontrar en la situación de tomar una decisión, cuando tenemos la responsabilidad de estar en un proyecto y en la que tengamos nuestras vistas, demasiada lógica aplicada, en ese caso ¿qué podemos hacer y cómo lo podemos mejorar?.
Seguir leyendo