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.
Sigue 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. Sigue 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.
Sigue leyendo

Rails y el territorio de los helpers: ¿Qué responsabilidades pueden/deben tener los Helpers?

Ruby_on_Rails_logo (1)Hoy voy a hablar de un tema que me parece interesante,  el territorio de los helpers. Discutiendo sobre el tema que da título este post, en ocasiones nos planteamos qué cosas deberían ir en los helpers y podemos encontrarnos con métodos que hemos desarrollado nosotros mismos y en ocasiones no son muy acertados. Voy a intentar responder a las preguntas de ¿cuándo debo utilizar un helper? y ¿de qué manera debo hacerlo? Por ejemplo, imagina que tenemos un template que hacemos una llamada a un método helper y que dicho método helper lo que está haciendo es pintar una parte de HTML, ¿crees que un helper debería contener código HTML? es decir, ¿la etiqueta en este caso de tag(:br)?

def add_user_check_box(user)        

      content_tag(:label check_box_tag(“Users”,  + ” “  +  user.name ) +   tag(:br)

end

En mi opinión, creo que esto no pinta bien hacerlo así ya que el HTML no es territorio de helper es de la vista,  aunque únicamente sea que pinte una etiqueta tag, como es el caso o podemos añadir otras etiquetas HTML, select o checkboxes, dentro del método helper del ejemplo, pero tampoco sería el helper el lugar adecuado para ello, entonces yo me pregunto:
Sigue leyendo

Ruby: métodos de clase y métodos de instancia – cambiar la palabra es “La he liado parda”

med_Pragmatic.Bookshelf.Programming.Ruby.Jul.2013.ISBN.1937785491.pdfEn ocasiones es difícil explicarse por medio de la palabra, eso lo tengo muy claro, pero si a esto le sumas el poner la palabra definida erróneamente, puede llevar a términos que no es lo mismo, confundir al que lo está leyendo y piensas, “la he liado parda”. El caso es que he cometido el error de cambiar una palabra y poner que una solución a un problema (no es relevante el problema de origen para lo que voy a contar) era un método de clase Myclass.method en vez de un método de instancia Myclass#method  y como es lógico no es lo mismo, eso está claro, pero para que no te pase a ti lo mismo, voy a tratar de explicarlo, aunque lo de equivocarse, si eres humano, en ocasiones te puede ocurrir.

Quiero tratar el tema desde dos puntos de vista diferentes y quería hablar de los métodos de instancia y los métodos de clase, cuando tenemos una clase sin herencia y la otra es cuando tenemos herencia y explicar que self.class.method no es lo mismo que ClassName.method cuando hacemos herencia entre clases. Otro tema que quiero explicar es la concatenación de métodos, mediante los métodos de clase.
Sigue 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.
Sigue leyendo

Method_missing(): ¿me ayuda a eliminar código duplicado? – espera, déjame que te lo explique

Metaprogramming RubyEn esta ocasión me gustaría hablar del method_missing(), me lo he encontrado en varias ocasiones y siempre lo he mirado de lado, no sea que pase algo.

Fuera de bromas, es otro de los temas, que tenía ganas de comentar y que mejor ocasión después de ver un vídeo hablando de este tema, leer sobre ello y preguntar a Paolo Perrotta sobre su charla en vídeo, que recomiendo ver por su alto contenido de información, titulado “The Revenge of method_missing()”, espera no te preocupes en buscarlo, que lo pongo al final del post, vamos por partes,  voy a tratar de explicar a mi manera con la ayuda de la información proporcionada por Paolo, tal como yo entendido y cuando debemos o no, utilizar este método. Pero lo principal es conocer, para poder saber aplicarlo.

Comencé a leer hace tiempo ya (vuelvo a ver capítulos de vez en cuando como en este caso), el libro de Paolo Perrotta @nusco en twitter, “Metaprogramming Ruby” que comenta en el capítulo 2 sobre los métodos, por cierto muy interesante, como todo el libro y comienza la problemática, cuando tenemos definidos métodos, cuyo código está repetido en otros métodos dentro de la misma clase. En ese caso podemos pensar ¿method_missing() puede ayudarnos a que nuestro código no se repita? busquemos la respuesta y el posible razonamiento.
Sigue leyendo