From 34ca0b6362836984fafeac0dd73ae8cb3ad8aec2 Mon Sep 17 00:00:00 2001 From: Norman Clarke Date: Fri, 11 Nov 2011 11:44:12 -0300 Subject: [PATCH] Attempted fix for concurrency issue. https://github.com/norman/friendly_id/issues/180 --- lib/friendly_id/history.rb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/friendly_id/history.rb b/lib/friendly_id/history.rb index 6039b7c15..49d36a8d2 100644 --- a/lib/friendly_id/history.rb +++ b/lib/friendly_id/history.rb @@ -75,8 +75,14 @@ def self.included(model_class) def build_slug return unless should_generate_new_friendly_id? # Allow reversion back to a previously used slug - slugs.where(:slug => friendly_id).delete_all - slugs.build :slug => friendly_id + Slug.transaction do + select = slugs.where(:slug => friendly_id) + unless Slug.connection.adapter_name =~ /sqlite/i + Slug.connection.execute "#{select.to_sql} FOR UPDATE" + end + select.delete_all + slugs.build :slug => friendly_id + end end # Adds a finder that explictly uses slugs from the slug table.