Uno de nuestros proyectos, sobre el que quizás escribamos próximamente, está siendo desarrollando sobre el framework Ruby on Rails. Pero ¿por qué? Podríamos dar muchos motivos: la legibilidad del código, la generación automática de código, el elevado grado de abstracción que propone, la sencillez de la arquitectura… pero al final, estaríamos hablando de lo mismo: la productividad.
Antes de empezar a escribir este artículo andaba dándole vueltas a lo siguiente: ¿Cómo explicar las ventajas de trabajar con Ruby on Rails a alguien que nunca haya trabajado con Ruby on Rails?. Y creo que he encontrado la respuesta: mostrando el código.
Lo más adecuado, teniendo en cuenta que este framework está enfocado a trabajar bajo el patrón MVC, sería poner un ejemplo relacionado con cada tipo de componente. Creo que, en conjunto, aportan una idea bastante buena de la filosofía del sistema.
Modelos
¿Cómo describir un modelo en Ruby on Rails? Pongamos que tenemos una clase Proyecto (Project), cuyos objetos están vinculados a un directivo (Manager) y a varios hitos (Milestone), y que además deseamos garantizar que el nombre está presente al guardar el objeto. Pues bien, bastaría con algo así:
class Project < ActiveRecord::Base has_one :manager has_many :milestones validates_presence_of :name end
Por otro lado, necesitaríamos definir el modelo en la base de datos. Para ello, Ruby on Rails, nos proporciona las migraciones (Migrations), que son descripciones abstractas de los modelos de datos que se convierten automáticamente al lenguaje de consultas del sistema gestor que estemos utilizando. Así, uno simplemente especifica algo como:
class CreateProjects < ActiveRecord::Migration
def self.up
create_table :projects do |t|
t.string :name
t.string :description
t.timestamps
end
end
def self.down
drop_table :projects
end
end
Y es Ruby on Rails el encargado de hacer el “trabajo sucio”. Este enfoque nos permitiría, por ejemplo modificar el motor de la base de datos de nuestro proyecto en cuestión de minutos.
Controladores
Los controladores agrupan métodos que actúan sobre el modelo de datos, sirviendo de intermediarios entre las vistas y el modelo. Su organización es algo más compleja que la de los modelos y las vistas, así que sólo voy a mostrar algunas líneas significativas.
¿Cómo obtener todos los proyectos del sistema?
@projects = Project.all
¿Y cómo grabar los datos de un nuevo proyecto (“Project”) recibidos desde un formulario? Muy sencillo:
@project = Project.new(params[:project]) @project.save
Vistas
Por último, hablemos de las vistas, que en este caso vienen a ser las páginas en HTML que presentan datos y formularios. Por ejemplo, ¿cómo sería el formulario que recogiera los datos del ejemplo anterior?
<% form_for @project do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>
<p>
<%= f.label :description %><br />
<%= f.text_area :description %>
</p>
<p>
<%= f.submit 'Create', :action => 'create' %>
</p>
<% end %>
¿Te han convencido estos ejemplos? Entonces prueba a darle una oportunidad a Ruby on Rails. No te arrepentirás.