Seguramente se ha presentado el caso donde tiene una tabla a nivel base de datos que guarda la información de una entidad que tiene un comportamiento de árbol, peensando un ejemplo práctico tenemos una tabla de Categorias la cual esta construida por el siguiente script:
1 CREATE TABLE categories (
2 id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
3 nombre VARCHAR(20) NOT NULL,
4 parent_id BIGINT NULL
5 );
De esta manera podriamos tener lo siguiente:
- General de División
- General de Brigada
- General Brigadrier
Y visto como una tabla tendrías:
id | nombre | parent_id
------------------------------------
1 | General de División | null
2 | General de Brigada | 1
3 | General Brigadier | 2
Vayamos al código...
Existe una funcion llamada "acts_as_tree" la cual nos ayuda con ese comportamiento, es importante hacer la aclaración que hasta la versión 1.x de Rails (mas específicamente en ActiveRecord) era parte de ésta, pero apartir de la versión 2.x, ésta fue seprada para convertirse en un plugin.
La instalación del plugin es muy sencilla, basta con ejecutar la siguiente linea:
script/plugin install acts_as_tree
Una vez hecho esto, podemos ir a nuestra clase model "Categoria":
1 class Categoria < ActiveRecord::Base
2 acts_as_tree :order => 'parent_id'
3 end
De esta manera tenemos los isguientes metodos disponibles para aprovechar mucho mejor el comportamiento en arbol:
Método | Descripcion |
children | devuelve todos los hijos inmediatos |
parent | devuelve el padre (objeto inmediato) |
siblings | devuelve todos los hijos del mismo padre (hermanos) |
self_and_siblings | devuelve todos los hermanos incluyéndome |
ancestors | devuelve todos los objetos padre hasta llegar a la raiz (padre, abuelo, etc) |
root | devuelve el objeto raiz de la jerarquía |
1 comentario:
Muy buen ejemplo, simple pero completo. Gracias
Publicar un comentario