Rails - 使用并发从db递增整数

时间:2014-06-06 16:25:22

标签: ruby-on-rails concurrency

在我们的数据库中,我们有一个commentsblogs的表格。

有一个字段commentscomment_blog_index,对于博客中的每条评论都会增加。

...因此,如果我们对特定博客有3条评论,则每条评论的comment_blog_index值为:123(分别)

设置comment_blog_index的代码如下所示:

@comment = Comment.new
@comment.comment_blog_index = @blog.comments.count + 1

当两个用户同时触发此代码时,会出现问题。它将为两个用户计算相同的值,并且comment_blog_index是重复的。

我已经看到了Item.increment_counter( :total_bids, item.id )的代码,但这要求您已经在数据库中的一个记录中存储了一个总和。在我们的例子中,记录是在`commments``表中创建的。

我们如何防止这种情况?

2 个答案:

答案 0 :(得分:1)

正如您已经看到的,您当前的方法并不安全。您可以添加验证和回调以及各种方法来尝试并确保其安全,但我建议应该在数据库级别进行此类工作。

implement a propert auto-incrementing fieldoffload that work to a gem

答案 1 :(得分:-1)

这会有所帮助 Generate an auto increment field in rails 它显示了如何在rails中实现自动增量