Foreigner

Puede que sea una rareza mía, pero me gusta tener bien definidas las foreign keys en mis aplicaciones. Con Ruby on Rails no es algo completamente necesario, ya que Rails puede ocuparse de todo esto sin que tengamos que tocar la base de datos, pero a mi ver, es mejor que la base de datos haga lo que tiene que hacer.

El problema hasta ahora era que definir las foreign keys en una aplicación Rails era un poco engorroso. Había dos opciones: crear un fichero SQL con el código que creara las foreign keys, o crear unas migrations. La solución óptima desde luego serían las migrations, pero las migrations de Rails no nos proveen de ningún helper que nos ayude a crear las foreign keys de una forma rápida.

Aquí es donde aparece la gem protagonista del día, foreigner. Foreigner nos provee de helpers para poder crear nuestras foreign keys de una forma simple en nuestras migrations. Funciona con las bases de datos más utilizadas, MySQL, PostgreSQL y SQLite. Foreigner nos ofrece un método add_foreign_key y un método remove_foreign_key, que hacen justo lo que esperamos, crear una foreign key y eliminarla.

Con esto podemos definir nuestras foreign keys de una forma “bonita” en nuestras migrations sin ninguna complicación.

Enlace: Foreigner

Rails 3.1

Desde el día 30 de agosto tenemos disponible la versión 3.1 de Rails. Es una revisión mayor, que trae algunas nuevas funcionalidades respecto a Rails 3.0.

Pese a no ser ningún experto en este framework, os comento algunas de estas funcionalidades y lo que me han parecido.

Las tres principales novedades son el Assets Pipeline, el streaming de HTTP y la tercera, pero no por ello menos importante, es que a partir de ahora jQuery será el framework de JavaScript por defecto.

El Assets Pipeline es una funcionalidad ampliamente solicitada por algunos desarrolladores. A partir de ahora podremos utilizar SASS para el código CSS y CoffeeScript para el código JavaScript. SASS nos permite tener un código CSS mucho más claro, pudiendo utilizar variables, anidado de objetos, etc. Igualmente ocurre con CoffeScript, que nos permite utilizar código JavaScript de una forma mucho más cómoda, y sin perder ninguna de sus ventajas.

En cuanto al streaming de HTTP, es una nueva funcionalidad que podremos utilizar dependiendo del servidor de aplicaciones que utilicemos, pero que está disponible en servidores tan utilizados como ngingx. El streaming de HTTP consiste en que el navegador puede comenzar a descargarse las hojas de estilos y el código JavaScript mientras el servidor todavía está generando la respuesta, lo que hace que las páginas carguen de forma mucho más rápida.

Respecto a la última novedad poco se puede decir, jQuery es un framework de sobra conocido por los desarrolladores web desde hace tiempo, con multitud de plugins disponibles y con ejemplos y documentación por toda la red. De todas maneras para los que estén acostumbrados a Prototype, se podrá volver a utilizar este framework sin ningún problema.

Personalmente llevo utilizando esta versión de Rails desde que apareció la primera Release Candidate. De las novedades que he comentado las que a mi más me han gustado son, primero la inclusión de jQuery por defecto, ya que es el framework JavaScript con el que me siento más a gusto y pese a que antes se podía utilizar haciendo algunas modificaciones, siempre es más cómodo que esté todo preparado para usarlo.

La segunda cosa que me ha llamado más la atención es el Assets Pipeline. Inicialmente es una funcionalidad que veía con cierto escepticismo, ya que no le veía mucho sentido añadir más código intermedio para después generar más código. Pero una vez te pones a usarlo, sobretodo (para mi) en el caso de CSS, es extremadamente cómodo. El poder anidar los estilos unos dentro de otros, el poder usar variables… Creo que es desde luego un gran acierto. En el caso de JavaScript no me ha resultado tan cómodo, puede ser porque me haya rendido un poco pronto, pero aun así seguro que con el tiempo también será una funcionalidad sin la que no podremos vivir.

¡Y eso es todo! ¡Ale, a actualizar vuestras aplicaciones!

CKEditor

Últimamente no tengo mucho tiempo para dedicarle a nada que no sea trabajar, y mucho menos para dedicárselo al blog. Uno de los motivos era que no había conseguido poner ningún editor de texto enriquecido que funcionara correctamente, sobretodo cuando subía la aplicación a Heroku, por lo que tenía que escribir los posts en HTML, lo que me llevaba mucho tiempo adicional.

Pero el otro día navegando de un lado para otro me encontré con CKEditor, un editor de texto enriquecido que parece funcionar de forma bastante fácil con Rails. A pesar de funcionar bastante bien, la instalación no es precisamente intuitiva, sobretodo utilizando Rails 3.1 y haciendo la instalación en Heroku, así que os indico los pasos a seguir.

Lo primero es incluir el gem de CKEditor en nuestro Gemfile:

gem "ckeditor"

Después de hacer el consabido bundle install debemos descargar e instalar lo que es el CKEditor propiamente dicho, no la gem. Para esto ejecutamos lo siguiente:

rails generate ckeditor:install --path=public/assets

Esto descargará CKEditor y nos lo dejará en la ruta que le hemos indicado. Si utilizamos Rails 3.1 la ruta debe ser la que he puesto, public/assets.

Una vez hecho esto ya tenemos todo lo necesario para utilizar ckeditor en nuestra aplicación. Si queremos utilizar las opciones para subir ficheros, deberemos ejecutar algún comando más que está indicado perfectamente en la documentación, por lo que no lo voy a indicar.

Para incluir un editor en una de las páginas de nuestra aplicación debemos incluir el JavaScript de ckeditor:

<%= javascript_include_tag "/assets/ckeditor/ckeditor.js" %>

Una vez hecho esto ya podemos incluir un editor (o los que queramos) en la página, por ejemplo:

cktext_area_tag("blog_contenido", "Contenido del textarea")

Y eso es todo, con esto tenemos en nuestra aplicación un completo editor de texto enriquecido.

En la documentación podemos encontrar todas las opciones adicionales así como las distintas configuraciones que podemos utilizar.

Apotomo

Hace poco me han preguntado sobre la posibilidad de crear una web en la que los usuarios puedan tener múltiples widgets que colocar y gestionar a su gusto. Lo primero que me vino a la cabeza es una web como iGoogle, pero teniendo esto como ejemplo parece bastante complicado implementar algo así desde cero. Me puse a buscar por la web a ver si había alguna forma “sencilla” de implementar algo así para una aplicación Rails y me encontré con Apotomo, que es un framework para crear aplicaciones web con widgets con Rails.

Apotomo nos permite desarrollar widgets de una manera bastante cómoda, anidarlos y gestionar los mensajes entre ellos, y aunque inicialmente puede parecer un poco complicado, una vez lo vas entendiendo es bastante intuitivo.

En su web tienen screencasts, documentación y un tutorial bastante decente para enseñarnos cómo integrar widgets en nuestra aplicación, desde la base que son los objetos de los widgets, pasando por los controladores y las vistas.

Si estais pensando en desarrollar algo de este estilo desde luego Apotomo es una opción a tener muy en cuenta.