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

Anuncios

Sidekiq, una gema y solución a un problema concreto

Ruby & George April 07En esta ocasión vamos a hablar de Sidekiq, una gema muy interesante, en la que se me ha planteado un problema y voy a contar cómo lo he resuelto. El tema de la elección de Sidekiq ha sido por el tratamiento de los workers mediante threads y no mediante procesos forks, como es el caso de utilizar Resque. Si quieres ver ambas gemas, te dejo los links de Sidekiq y de Resque, pero veamos algunas aclaraciones antes.

Los Forks: cuando trabajamos con procesos Forks lo que estamos haciendo es crear una copia completa del proceso en si mismo y podríamos decir que copiamos el espacio de direcciones y de todos los descriptores.  Sin meterme en mucha más profundidad y como parte de una aclaración en las posibilidades que puedes tener, si el lenguaje de programación (MRI Ruby) no admite el nivel kernel level threading, entonces esta es la única manera de difundir el trabajo a través de múltiples núcleos, ya que cada proceso se consigue un núcleo diferente. También ganas un poco de estabilidad, pero por contra tienes la posibilidad de que si un proceso padre se cuelga los procesos hijos de este, quedan en estado zombies.

Los threads: podríamos decir que consumen menos recursos, ya que comparten el espacio de direcciones, la memoria y permiten tener una comunicación más fácil, si hacemos una comparación con la comunicación entre procesos forks. El cambio de contexto entre los threads dentro del mismo proceso también es generalmente mucho mejor que los forks. Dependiendo del tiempo de ejecución que se utiliza, cualquier problema que pueda ocurrir con los threads (por ejemplo, necesidad de utilizar grandes cantidades de memoria para una tarea) pueden ser manejados por el recolector de basura en su mayor parte. Finalmente una ventaja es con respecto a los procesos zombies, es que no hay que preocuparse, ya que mueren en el momento que el proceso muere, evitando los procesos zombies.

El problema que se me ha planteado es el siguiente: Seguir leyendo

Definir rutas en una aplicación de Rails con New Resources – RESTful Route Customizations

Rail Hace poco escribía sobre cómo poder definir nuestras propias rutas en Rails y veíamos algunas como collection y members, en la que hablábamos de:

No estamos limitados a las siete rutas de index, create, new, show, update, edit y destroy  que RESTful crea de forma predeterminada, sino que es posible añadir rutas adicionales que se aplican a una colección o los miembros individuales de la colección. Para ello tenemos member y collection. Seguir leyendo

Rails Routing from the Outsise In: Definir nuestras propias rutas en una aplicación de Rails

Rails Creo que merece la pena dedicarle un post al tema de las Rutas de Rails “Rails Routing from the Outside In y cómo se definen, por la importancia y relevancia que puede llegar a tener, por eso y que además he oído decir a compañeros de trabajo que si no defines las rutas y las dejas por defecto, puede ser un autentico infierno.

Ahora bien, si tengo que responder a la pregunta ¿qué son las rutas en Rails?, yo diría que routes hace básicamente dos cosas. Una es, que es capaz de reconocer lo que le llega y ver en la URL, lo que contiene, para enviar a la acción correspondiente del controlador. Otra cosa que hace routes es, que nos facilita mediante una serie de helpers en las vistas la navegación, sin poner URL con path del estilo ‘/user/compra/artículo’, sino del estilo de user_path, es decir, permite la generación dinámica de direcciones URL para que podamos utilizarlo como argumentos a métodos como link_to y redirect_to Esto nos aporta un gran ventaja como puedes ya imaginarte.

Pero para acercarnos un poco más a las rutas en Rails, pensemos por un momento que cuando estamos solicitando desde nuestro navegador una URL, lo que estamos solicitando es un recurso y ese recurso puede ser una página estática, dinámica, un vídeo, un audio, una imagen, una rss, un xml, un json…etc. Son recursos y veremos que el tipo de arquitectura que Rails utiliza, es la arquitectura tipo RESTful, para ver cómo poder acceder a dichos recursos dentro de la aplicación y la manipulación mediante verbos HTTP.
Seguir leyendo