重复无限投票竞赛的结构

时间:2012-03-28 14:09:42

标签: ruby-on-rails voting

我正处于构建应用程序的计划阶段,所有用户(已注册或未注册)都可以每分钟投票一次。投票窗口应持续一段时间(例如1个月)。此时定义了获胜实体,投票期间重置并重新开始。然后,访客可以留下关于该期间获胜者的评论。 我的问题是您认为设置此类内容的最佳方法是什么?

以下是我目前的想法,但似乎并不理想:

1)投票模型:entity_id,contest_id,user_id(可选),created_at,ip_address

  • 在新投票中搜索数据库中的ip并查看时间差异是否超过用户投票之间的允许投票时间限制
  • 使用CAPTCHA每个可变票数确保人
  • 通过计算竞赛实体的所有条目来计算当前投票数

2)比赛模型:开始和结束日期时间

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

3)获胜者模型:contest_id,entity_id

  • 允许用户对过去的比赛获胜者发表评论

1 个答案:

答案 0 :(得分: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

我认为不需要Winners模型,因为它只能是用户中的布尔值。如果您需要,您可以随时拥有一个属于用户和竞赛的奖金模型来链接这两者。

希望有所帮助。