Single Table Inheritance Herencia de tablas con Rails
Single Table Inheritance Herencia de tablas con Rails : ) por Nelson Rojas Núñez www. profenelson. cl
El problema class Ad < Active. Record: : Base Ads -name -body -published class Page < Active. Record: : Base class Post < Active. Record: : Base Posts -name -body -published Pages -name -body -published Las tres tablas apuntan a elementos diferentes, tienen los mismos campos, pero usan 3 tablas en la base de datos.
Usando Single Table Inheritance class Entry < Active. Record: : Base Entries -name -body -published -type class Ad < Entry class Post < Entry class Page < Entry Ad Post Page
Ejemplo $ rails demo$ ruby script/generate model entry name: string body: text published: boolean type: string demo$ rake db: migrate demo$ ruby script/generate model post --skip-migration demo$ ruby script/generate model ad --skip-migration demo$ ruby script/generate model page --skip-migration Las Clases class Entry < Active. Record: : Base end class Page < Entry end class Post < Entry end class Ad < Entry end
Usemos la consola para probar >> o = Post. new >> #<Post id: nil, name: nil, body: nil, published: nil, type: "Post", created_at: nil, updated_at: nil> >> o. name = "mi primer post" >> o. body = "este es el cuerpo de mi primer post" >> o. published = true >> o. save >> p = Page. new >> #<Page id: nil, name: nil, body: nil, published: nil, type: "Page", created_at: nil, updated_at: nil> >> p. name = "mi primera pagina" >> p. body = "este es el cuerpo de mi primera pagina" >> p. published = true >> p. save >> Entry. count => 2 >> Post. count => 1 >> Page. count => 1
Conclusiones Lo bueno a. Permite realizar búsquedas en un único lugar para cosas diferentes. b. Menos código para mantención. c. Herencia elegante : ) Lo malo a. No es la panacea, por tanto no abusar de ella cuando los elementos requieren tratamientos diferentes. Una mala idea es hacer herencia con órdenes de compra, facturas y guías.
Enlaces a. http: //juixe. com/techknow/index. php/2006/06/03/rails-singletable-inheritance/ b. http: //www. therailsway. com/2006/11/19/tracks-part-3
- Slides: 7