【问题标题】:Structure for recurring unlimited voting contests反复无限制投票竞赛的结构
【发布时间】:2012-03-28 14:09:41
【问题描述】:

我正处于构建应用程序的计划阶段,所有用户(无论是否注册)都可以每分钟左右投票一次。投票窗口应持续一段时间(例如 1 个月)。在这一点上,一个获胜的实体被定义,投票期重置并重新开始。然后,参观者可以留下关于该时期获胜者的 cmets。 我的问题是你认为设置这样的东西的最佳方法是什么?

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

1) 投票模型:entity_id、competition_id、user_id(可选)、created_at、ip_address

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

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

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

3) 获胜者模型:contest_id、entity_id

  • 允许用户对过去的比赛获胜者进行 cmet

【问题讨论】:

  • 最佳方式是什么意思?建筑学?使用什么语言来实现它?
  • 架构。我将使用 ROR。我在上面展示了我正在考虑的模型/数据库结构。我的问题是有更好的方法来构建它吗?

标签: ruby-on-rails voting


【解决方案1】:

在不知道更多细节的情况下,我会按照以下方式进行:

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 模型来链接两者。

希望对您有所帮助。

【讨论】:

  • 谢谢。组织/实体经过投票并获胜。因此,将在比赛结束时设置获胜组织/实体的获胜模型的新实例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多