1

我正在用 Rails 构建一个测试应用程序,它是一个新闻故事投票系统,可以自学 Rails 和 Ruby。

我试图限制投票,以便用户只能对每篇文章“投票”一次。经过一些研究,我发现让这个工作的最佳方法是在我创建的投票模型上添加验证,以检查该用户的重复投票条目。

我并不是真的想要一个代码示例,只是一些建议,这是解决这个问题的最佳方法?活动记录可以完美地验证工作,但在数据库级别施加如此大的压力并不是一个好习惯,但也许这完全没问题?

希望这是有道理的,感谢阅读。

4

1 回答 1

1

这实际上是正确的设计。在关系设置中,您将拥有 Stories、Users 和 Votes,其中 Votes 同时具有 user_id 和 story_id。强制数据完整性归根结底是数据库约束,如果不去数据库检查,您无法真正知道用户是否对故事进行了投票。如果需要,您可以保留某种更高级别的缓存以防止尽可能多的数据库访问,但现在这样做将是过早的优化。必要时越过那座桥。

要考虑的一件事是在您的投票表上创建 (user_id, story_id) 的复合唯一索引。这将具有支持您的验证和提高 O(log n) 操作的投票查找速度的好处,这应该消除大部分时间负担。您可以做的其他事情是禁止对旧故事进行投票,并清除任何超过特定年龄(对应于您不允许投票的时间)的投票记录,这将使您的投票表随着时间的推移保持相对恒定的大小,而不是只是让它永远成长。

于 2013-08-16T00:33:03.583 回答