Descargar la presentación
La descarga está en progreso. Por favor, espere
1
Single Table Inheritance
Herencia de tablas con Rails :) por Nelson Rojas Núñez
2
El problema Ads -name -body -published Pages -name -body -published
class Ad < ActiveRecord::Base El problema Ads -name -body -published class Page < ActiveRecord::Base Pages -name -body -published class Post < ActiveRecord::Base Posts -name -body -published Las tres tablas apuntan a elementos diferentes, tienen los mismos campos, pero usan 3 tablas en la base de datos.
3
Usando Single Table Inheritance
class Entry < ActiveRecord::Base Entries -name -body -published -type class Ad < Entry class Post < Entry class Page < Entry Ad Post Page
4
Ejemplo Las Clases class Entry < ActiveRecord::Base end
$ rails demo 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 < ActiveRecord::Base end class Page < Entry end class Post < Entry end class Ad < Entry end
5
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
6
Conclusiones Lo bueno Permite realizar búsquedas en un único lugar para cosas diferentes. Menos código para mantención. Herencia elegante :) Lo malo 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.
7
Enlaces
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.