Estoy dándole vueltas a cómo hacer un sistema de votación (estilo digg
o meneame), para una comunidad de usuarios, donde los usuarios
escriben su blog y suben sus fotos, y todo es votable.
O sea, a diferencia de meneame/digg donde solo votas un tipo de
modelo, los enlaces a noticias, aquí se tiene que poder votar por
separado los posts de los blog y las fotos de los usuarios, y así
poder ver las fotos más votadas, los posts más votados, etc. Y
tambiénotros modelos asociados a los usuarios. Quizá incluso se pueda votar
directamente a los usuarios.
¿Cuál creéis que sería la mejor manera de plantear esto? Estaba
pensando en usar herencia, en plan tener una clase “Votable” con toda
la funcionalidad necesaria (anotar karma, asociar votos, etc.), y de
ahí descienden Usuarios, Fotos y Posts… pero usando single table
inheritance sería un tanto guarro, por la necesidad de meterlo todo en
una sola tabla.
¿Se os ocurre una solución mejor? ¿O paso de herencia y lo implemento
por separado para cada modelo?
Jaime I.
escribió:> pensando en usar herencia, en plan tener una clase “Votable” con toda
la funcionalidad necesaria (anotar karma, asociar votos, etc.), y de
ahí descienden Usuarios, Fotos y Posts… pero usando single table
inheritance sería un tanto guarro, por la necesidad de meterlo todo en
una sola tabla.
¿Se os ocurre una solución mejor? ¿O paso de herencia y lo implemento
por separado para cada modelo?
De primeras se me ocurre agrupar esas funcionalidades en un módulo
‘Votable’ y, en los modelos necesarios, incluir ese módulo y crearles el
campo ‘votes’ en cada tabla.
Muy interesante Manuel, gracias. Ahora mi duda es… ves factible
simular
la herencia en tabla multiple con es plugin. Me refire, podrÃas tener
una clase
user con sus atributos y la relacion
has_many_polymorphs :extesion, :from =>
{:admin, :phone_assistant, :developer}
PodrÃa valer no? no se ajusta conceptualmente pero es una aproximación.
Estoy dándole vueltas a cómo hacer un sistema de votación (estilo digg
o meneame), para una comunidad de usuarios, donde los usuarios
escriben su blog y suben sus fotos, y todo es votable.
Asociaciones polimóficas. Con has_many_polymorphs lo tienes todo
solucionado en 10 líneas
Manuel González Noriega
escribió:> On 12/12/2007, Raul M. [email protected] wrote:
Jaime I. escribió:
Estoy dándole vueltas a cómo hacer un sistema de votación (estilo digg
o meneame), para una comunidad de usuarios, donde los usuarios
escriben su blog y suben sus fotos, y todo es votable.
Asociaciones polimóficas. Con has_many_polymorphs lo tienes todo
solucionado en 10 líneas
Gracias por el enlace Manuel, no lo conocía y tiene una pinta estupenda Mi propuesta era más simplona: iba más orientada a tener un simple
contador de votos, sin contar quién vota qué ni datos adicionales sobre
cada voto.
Yo creo que include con las relaciones polimórficas eso lo resuelves
sin tener que utilizar ningun plugin. Es lo mismo que hacer que una
categoria o una tag se pueda asignar a múltiples modelos.
class Vote < ActiveRecord::Base
belongs_to :votable, :polymorphic => true
end
class Post < ActiveRecord::Base
has_many :votes, :as => :votable
end
class Photo < ActiveRecord::Base
has_many :votes, :as => :votable
end