polymorphics associations
TRANSCRIPT
Polymorphics Associations
Reutilizando Tablaspor Nelson Rojas Núñez
nelsonrojas.wordpress.com
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.
El héroe
posts
pages
ads
comments
Usar un modelo que permita asociaciones polimórficas, es decir, de más de un modelo.
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
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">]>>
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
Enlaces
● http://maulanaruby.wordpress.com/2007/02/17/sti-vs-polymorphic-association/
● http://railscasts.com/episodes/154-polymorphic-association