tics en la vida cotidiana prepa en linea modulo 1.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.