polymorphics associations

7
Polymorphics Associations Reutilizando Tablas por Nelson Rojas Núñez nelsonrojas.wordpress.com

Upload: nelson-rojas-nunez

Post on 03-Aug-2015

138 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Polymorphics associations

Polymorphics Associations

Reutilizando Tablaspor Nelson Rojas Núñez

nelsonrojas.wordpress.com

Page 2: Polymorphics associations

El problema

posts

pages

ads

post_comments

page_comments

ad_comments

Todos los modelos tienen comentarios y lo usual (según la teoría) es tener una tabla asociada por cada uno de los modelos, es decir, cada cosa en su lugar.

Page 3: Polymorphics associations

El héroe

posts

pages

ads

comments

Usar un modelo que permita asociaciones polimórficas, es decir, de más de un modelo.

Page 4: Polymorphics associations

Vamos al código

script/generate model comment content:text commentable_id:integer commentable_type:stringrake db:migrate

La Claseclass Comment < ActiveRecord::Base belongs_to :commentable, :polymorphic => trueend

Las Asociacionesclass Entry < ActiveRecord::Base has_many :comments, :as => :commentableend

Page 5: Polymorphics associations

En la consolaLoading development environment (Rails 2.3.2)>> p = Page.first=> #<Page id: 2, name: "mi primera pagina", type: "Page", created_at: "2009-11-12 11:41:08", updated_at: "2009-11-12 11:41:08">>> p.comments=> []>> p.comments.count=> 0>> c = p.comments.build=> #<Comment id: nil, content: nil, commentable_id: 2, commentable_type: "Entry", created_at: nil, updated_at: nil>>> c.content = "este es mi primer comentario en la pagina"=> "este es mi primer comentario en la pagina">> c.save=> true>> p.comments.count=> 1>> p.comments=> [#<Comment id: 2, content: "este es mi primer comentario en la pagina", commentable_id: 2, commentable_type: "Entry", created_at: "2009-11-12 16:57:25", updated_at: "2009-11-12 16:57:25">]>>

Page 6: Polymorphics associations

Conclusión

Los modelos con asociación polimórficas son ideales para aquellas situaciones donde necesitamos darle comportamientos similares a nuestros modelos:

● Comentarios● Votaciones● Favoritos● Rankeables