In our database, we have a table for comments
and blogs
.
There's a field comments
.comment_blog_index
that increments for each comment in the blog.
...so if we have 3 comments for a particular blog, the value for comment_blog_index
for each comment is: 1
, 2
, 3
(respectively)
The code that sets comment_blog_index
looks like this:
@comment = Comment.new
@comment.comment_blog_index = @blog.comments.count + 1
The problem happens when two users trigger this code simultaneously. It will calculate the same value for both users, and the comment_blog_index
is duplicated.
I've seen code for Item.increment_counter( :total_bids, item.id )
, but that requires you to already have a record in the database in a table that stores a summation. In our case, the record is being created inside the `commments`` table.
How do we prevent this?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…