在我们的数据库中,我们有一个comments
和blogs
的表格。
有一个字段comments
。comment_blog_index
,对于博客中的每条评论都会增加。
...因此,如果我们对特定博客有3条评论,则每条评论的comment_blog_index
值为:1
,2
,3
(分别)
设置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``表中创建的。
我们如何防止这种情况?
答案 0 :(得分:1)
正如您已经看到的,您当前的方法并不安全。您可以添加验证和回调以及各种方法来尝试并确保其安全,但我建议应该在数据库级别进行此类工作。
implement a propert auto-incrementing field或offload that work to a gem。
答案 1 :(得分:-1)
这会有所帮助 Generate an auto increment field in rails 它显示了如何在rails中实现自动增量