2. El problema
posts post_comments
page_comments
pages
ads 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.
3. El héroe
posts
pages comments
ads
Usar un modelo que permita asociaciones polimórficas, es
decir, de más de un modelo.
4. Vamos al código
script/generate model comment content:textcommentable_id:integer commentable_type:string
rake db:migrate
La Clase
class Comment < ActiveRecord::Base
belongs_to :commentable, :polymorphic => true
end
Las Asociaciones
class Entry < ActiveRecord::Base
has_many :comments, :as => :commentable
end
5. En la consola
Loading 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">]
>>
6. 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