2012-03-28 45 views
0

我在大楼里的所有用户(注册与否)的应用程序的规划阶段可以投票每分钟左右。投票窗口应持续一段时间(例如1个月)。在这一点上,一个获胜实体被定义,投票期间重新设置并开始全部。游客可以在那段时间留下有关胜利者的评论。 我的问题是你认为什么是最好的方式来设置这样的事情?结构无限重复投票竞赛

这里是我目前的想法,但似乎并不理想:

1)投票模式:ENTITY_ID,contest_id,USER_ID(可选),created_at,IP_ADDRESS

  • 搜索IP在分数新的投票,看看时间差异是否大于投票时间限制用户之间投票
  • 使用CAPTCHA每个可变票数,以确保人类
  • calcul通过计算所有条目的实体的较量吃电流计票

2)竞赛模式:开始和结束日期时间

  • 有一个每周或每月的cron作业创建的最新实例
  • votes如果当前日期在这两个日期之间找到当前比赛
  • 单个模型允许为比赛创建属性(例如,特殊种类的比赛)

3)赢家模式:contest_id,ENTITY_ID

  • 允许用户评论过去的大赛中获奖
+0

你是什么意思的最佳途径?建筑?用什么语言来实现它? – Adrian 2012-03-28 14:26:14

+0

建筑。我打算使用ROR。我展示了我正在考虑的模型/数据库结构。我的问题是有更好的方法来构建它吗? – Marc 2012-03-28 14:43:33

回答

0

不知道更多的细节,我会沿着线的东西去:

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 

这种方式,你可以有@user.votes, @contest.votes, @contest.users

我没有看到一个优胜者模型的需求,因为这可以只是在用户一个布尔值。如果您需要,您可以始终拥有属于用户和竞赛的Winnings模型,以将这两个模型链接起来。

希望有所帮助。

+0

谢谢。该组织/实体被投票并获胜。因此,在获奖组织/实体的奖金模式的新实例将设置在比赛结束时。 – Marc 2012-03-28 16:06:09