From c6f0461e898601578fa8160608d19fec319067fa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Christian=20Ba=CC=88uerlein?= <fabrik42@gmail.com>
Date: Fri, 14 Oct 2011 18:20:41 +0200
Subject: Consider attempted action in exception message of
 ActiveRecord::StaleObjectError

---
 activerecord/lib/active_record/errors.rb             | 9 +++++----
 activerecord/lib/active_record/locking/optimistic.rb | 4 ++--
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/activerecord/lib/active_record/errors.rb b/activerecord/lib/active_record/errors.rb
index 950fc7356c..fc80f3081e 100644
--- a/activerecord/lib/active_record/errors.rb
+++ b/activerecord/lib/active_record/errors.rb
@@ -99,15 +99,16 @@ module ActiveRecord
   #
   # Read more about optimistic locking in ActiveRecord::Locking module RDoc.
   class StaleObjectError < ActiveRecordError
-    attr_reader :record
+    attr_reader :record, :attempted_action
 
-    def initialize(record)
+    def initialize(record, attempted_action)
       @record = record
+      @attempted_action = attempted_action
     end
 
     def message
-      "Attempted to update a stale object: #{record.class.name}"
-    end    
+      "Attempted to #{attempted_action} a stale object: #{record.class.name}"
+    end
   end
 
   # Raised when association is being configured improperly or
diff --git a/activerecord/lib/active_record/locking/optimistic.rb b/activerecord/lib/active_record/locking/optimistic.rb
index cafe48cff6..2df3309648 100644
--- a/activerecord/lib/active_record/locking/optimistic.rb
+++ b/activerecord/lib/active_record/locking/optimistic.rb
@@ -103,7 +103,7 @@ module ActiveRecord
             affected_rows = connection.update stmt
 
             unless affected_rows == 1
-              raise ActiveRecord::StaleObjectError, self
+              raise ActiveRecord::StaleObjectError.new(self, "update")
             end
 
             affected_rows
@@ -127,7 +127,7 @@ module ActiveRecord
             affected_rows = self.class.unscoped.where(predicate).delete_all
 
             unless affected_rows == 1
-              raise ActiveRecord::StaleObjectError, self
+              raise ActiveRecord::StaleObjectError.new(self, "destroy")
             end
           end
 
-- 
cgit v1.2.3