SlideShare uma empresa Scribd logo
1 de 7
Baixar para ler offline
Single Table Inheritance

 Herencia de tablas con Rails :)
   por Nelson Rojas Núñez
  nelsonrojas.wordpress.com
class Ad < ActiveRecord::Base
El problema
                           Ads
                           -name
                           -body
                           -published

                                                  class Page < ActiveRecord::Base
                                                      Pages
  class Post < ActiveRecord::Base                     -name
  Posts                                               -body
  -name                                               -published
  -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 < ActiveRecord::Base
                           Entries
                           -name
                           -body
                           -published
                           -type




   class Ad < Entry     class Post < Entry           class Page < Entry

   Ad                   Post                         Page
Ejemplo
$ 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
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
 ● 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.
Enlaces

● http://juixe.com/techknow/index.php/2006/06/03/rails-single-
  table-inheritance/
● http://www.therailsway.com/2006/11/19/tracks-part-3

Mais conteúdo relacionado

Destaque

Grenzen van veiligheid e book
Grenzen van veiligheid e bookGrenzen van veiligheid e book
Grenzen van veiligheid e bookAmanda Jansen
 
Legislación vigente
Legislación vigenteLegislación vigente
Legislación vigentemarta
 
como agregar espacio a un disco lleno
como agregar espacio a un disco llenocomo agregar espacio a un disco lleno
como agregar espacio a un disco llenoYaneth Love Garcia
 
методические указаня по написанию курсовой
методические указаня по написанию курсовойметодические указаня по написанию курсовой
методические указаня по написанию курсовойDemanessa
 
бланк тэ рп уд од
бланк тэ рп уд одбланк тэ рп уд од
бланк тэ рп уд одDemanessa
 
Задротен
ЗадротенЗадротен
Задротенvaldis82
 
Presentacions amb programari lliure
Presentacions amb programari lliurePresentacions amb programari lliure
Presentacions amb programari lliureguest9860fa
 
Fotos do trabalho de inglês
Fotos do trabalho de inglêsFotos do trabalho de inglês
Fotos do trabalho de inglêslog1am
 
Marco Simeon (Rai), Riconoscimento Speciale al 37° Galà Niaf
Marco Simeon (Rai), Riconoscimento Speciale al 37° Galà NiafMarco Simeon (Rai), Riconoscimento Speciale al 37° Galà Niaf
Marco Simeon (Rai), Riconoscimento Speciale al 37° Galà NiafPhiNet Social Media Communication
 
Trabajo computación
Trabajo computaciónTrabajo computación
Trabajo computaciónandres22uio
 
Nissan
NissanNissan
Nissanhmnava
 
Trabajo de informatica
Trabajo de informaticaTrabajo de informatica
Trabajo de informaticaluis carlos
 
Generacioooooooooooooooooooooooooooooooon
GeneracioooooooooooooooooooooooooooooooonGeneracioooooooooooooooooooooooooooooooon
Generacioooooooooooooooooooooooooooooooonhelene3
 
Lo que hay que tener en cuenta al escribir un texto argumentativo
Lo que hay que tener en cuenta al escribir un texto argumentativoLo que hay que tener en cuenta al escribir un texto argumentativo
Lo que hay que tener en cuenta al escribir un texto argumentativoG. Paredes
 

Destaque (20)

Gebeurtenis
GebeurtenisGebeurtenis
Gebeurtenis
 
Panduan toko online
Panduan toko onlinePanduan toko online
Panduan toko online
 
Grenzen van veiligheid e book
Grenzen van veiligheid e bookGrenzen van veiligheid e book
Grenzen van veiligheid e book
 
Toxicidad del polipropileno
Toxicidad del polipropilenoToxicidad del polipropileno
Toxicidad del polipropileno
 
MMORPG ESPM ADM4A
MMORPG ESPM ADM4AMMORPG ESPM ADM4A
MMORPG ESPM ADM4A
 
Legislación vigente
Legislación vigenteLegislación vigente
Legislación vigente
 
como agregar espacio a un disco lleno
como agregar espacio a un disco llenocomo agregar espacio a un disco lleno
como agregar espacio a un disco lleno
 
методические указаня по написанию курсовой
методические указаня по написанию курсовойметодические указаня по написанию курсовой
методические указаня по написанию курсовой
 
бланк тэ рп уд од
бланк тэ рп уд одбланк тэ рп уд од
бланк тэ рп уд од
 
Задротен
ЗадротенЗадротен
Задротен
 
Presentacions amb programari lliure
Presentacions amb programari lliurePresentacions amb programari lliure
Presentacions amb programari lliure
 
Documento 24lkjlkjkl
Documento 24lkjlkjklDocumento 24lkjlkjkl
Documento 24lkjlkjkl
 
Fotos do trabalho de inglês
Fotos do trabalho de inglêsFotos do trabalho de inglês
Fotos do trabalho de inglês
 
Marco Simeon (Rai), Riconoscimento Speciale al 37° Galà Niaf
Marco Simeon (Rai), Riconoscimento Speciale al 37° Galà NiafMarco Simeon (Rai), Riconoscimento Speciale al 37° Galà Niaf
Marco Simeon (Rai), Riconoscimento Speciale al 37° Galà Niaf
 
Trabajo computación
Trabajo computaciónTrabajo computación
Trabajo computación
 
Sermão
SermãoSermão
Sermão
 
Nissan
NissanNissan
Nissan
 
Trabajo de informatica
Trabajo de informaticaTrabajo de informatica
Trabajo de informatica
 
Generacioooooooooooooooooooooooooooooooon
GeneracioooooooooooooooooooooooooooooooonGeneracioooooooooooooooooooooooooooooooon
Generacioooooooooooooooooooooooooooooooon
 
Lo que hay que tener en cuenta al escribir un texto argumentativo
Lo que hay que tener en cuenta al escribir un texto argumentativoLo que hay que tener en cuenta al escribir un texto argumentativo
Lo que hay que tener en cuenta al escribir un texto argumentativo
 

Último

Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 

Último (10)

Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 

Single table inheritance

  • 1. Single Table Inheritance Herencia de tablas con Rails :) por Nelson Rojas Núñez nelsonrojas.wordpress.com
  • 2. class Ad < ActiveRecord::Base El problema Ads -name -body -published class Page < ActiveRecord::Base Pages class Post < ActiveRecord::Base -name Posts -body -name -published -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 $ 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 ● http://juixe.com/techknow/index.php/2006/06/03/rails-single- table-inheritance/ ● http://www.therailsway.com/2006/11/19/tracks-part-3