2012-03-28 13 views
0

Ich bin dabei, eine App zu entwickeln, in der alle Benutzer (registriert oder nicht) jede Minute abstimmen können. Das Wahlfenster sollte eine bestimmte Zeit (zB 1 Monat) dauern. An diesem Punkt wird eine gewinnende Einheit definiert und die Wahlperiode wird zurückgesetzt und beginnt von vorne. Besucher können dann Kommentare über den Gewinner für diesen Zeitraum hinterlassen. Meine Frage ist, was denkst du, ist der beste Weg, etwas wie das aufzustellen?Struktur für wiederkehrende unbegrenzte Wahlwettbewerbe

Hier sind meine aktuellen Gedanken, aber nicht ideal erscheinen:

1) Vote Modell: ENTITY_ID, contest_id, user_id (optional), created_at, ip_address

  • Suche nach ip in db bei neuer Abstimmung und sehen, ob Zeitunterschied größer als erlaubt Abstimmung Zeitlimit zwischen User-Stimmen
  • verwenden CAPTCHA jede Variable Anzahl der Stimmen zu gewährleisten menschlichen
  • calcul aß Zahl aktuelle Abstimmung all Einträge für eine Entität für einen Wettbewerb zu zählen

2) Contest Modell: Beginn und Ende Datetime

  • hat einen wöchentlicher oder monatlicher Cron-Job erstellen die neueste Instanz
  • Stimmen finden aktuelle Wettbewerb, wenn das aktuelle Datum zwischen diesen zwei Terminen
  • einzelnen Modell ermöglicht Attribute, um den Wettbewerb zu schaffen (zum Beispiel spezielle Arten von Wettbewerben)

3) Winner Modell: contest_id, ENTITY_ID

  • für die Nutzer Kommentare zu vergangenen Wettbewerbsgewinner
  • erlaubt
+0

was meinst du mit dem besten Weg? Die Architektur? In welcher Sprache wird es implementiert? – Adrian

+0

Architektur. Ich werde ROR benutzen. Ich habe die Model/db-Struktur gezeigt, die ich oben betrachte. Meine Frage ist, gibt es eine bessere Möglichkeit, es zu strukturieren? – Marc

Antwort

0

Ohne weitere Details zu kennen, ich mit etwas entlang der Linien von gehen würde:

class User 
    has_many :votes 
    has_many :comments 
    has_many :contests, :through => :votes 

class Vote 
    belongs_to :user 
    belongs_to :contest 

class Contest 
    has_many :votes 
    has_many :users, :through => :votes 

class Comment 
    belongs_to :user 

Auf diese Weise können Sie @user.votes, @contest.votes, @contest.users haben usw.

Ich sehe nicht die Notwendigkeit für ein Winners-Modell, da dies nur ein boolescher Benutzer sein kann. Wenn Sie möchten, könnten Sie immer ein Winnings-Modell haben, das sowohl Benutzern als auch Wettbewerben gehörte, um die beiden zu verknüpfen.

Hoffnung, das hilft.

+0

Danke. Die Organisation/Entität wird gewählt und gewinnt. Also würde am Ende des Wettbewerbs eine neue Instanz des Gewinnmodells mit der gewinnenden Organisation/Einheit gesetzt werden. – Marc