Como implementar un sistema de votacion multi-modelo?

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.


Raul M. - Freelance Web D.
http://raul.murciano.net

Jaime, hace una hora han publicado en ruby inside un enlace a “10 Ruby
On Rails Plugins You Should Be Using”
(http://hosting.media72.co.uk/blog/2007/12/09/10-ruby-on-rails-plugins-you-should-be-using/)

El plugin número 11 es:

acts_as_rateable - OK we lied, this is the 11th plugin lets call

this one a freebie. Add a ratings system to any model, very simple to
use neat little plugin.

http://rateableplugin.rubyforge.org/

A ver si te sirve :slight_smile:

On Dec 12, 2007 10:21 AM, Jaime I. [email protected] wrote:


Jaime I.
http://jaimeiniesta.com - http://railes.net


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Ernesto Jiménez Caballero
Software Engineer Leader
Negonation
(34) 620 475 382
[email protected]

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.

El mié, 12-12-2007 a las 10:34 +0100, 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

http://blog.evanweaver.com/files/doc/fauna/has_many_polymorphs/files/README.html


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.

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

http://blog.evanweaver.com/files/doc/fauna/has_many_polymorphs/files/README.html

Gracias por el enlace Manuel, no lo conocía y tiene una pinta estupenda
:slight_smile: 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.

Todo depende de las necesidades de Jaime, claro :slight_smile:


Raul M. - Freelance Web D.
http://raul.murciano.net

Gracias Francesc, creo que es justo esto lo que andaba buscando.

Jaime

2007/12/12, Francesc E. [email protected]:

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

Y magia … sin plugin! :wink:

Un saludo,

Francesc

On 12/12/07, Manuel González Noriega [email protected]
wrote:

http://blog.evanweaver.com/files/doc/fauna/has_many_polymorphs/files/README.html
http://lists.simplelogica.net/mailman/listinfo/ror-es


name. francesc.esplugas
email. [email protected]
voice. 00 34 678 681 603

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs