aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/attribute_methods/primary_key.rb8
-rw-r--r--activerecord/test/cases/pk_test.rb15
2 files changed, 15 insertions, 8 deletions
diff --git a/activerecord/lib/active_record/attribute_methods/primary_key.rb b/activerecord/lib/active_record/attribute_methods/primary_key.rb
index ba64b8ee2f..8549414a12 100644
--- a/activerecord/lib/active_record/attribute_methods/primary_key.rb
+++ b/activerecord/lib/active_record/attribute_methods/primary_key.rb
@@ -45,10 +45,12 @@ module ActiveRecord
# Returns this record's primary key value wrapped in an Array
# or nil if the record is a new_record?
# This is done to comply with the AMo interface that expects
- # every AMo compliant object to respond_to?(:key) and return
+ # every AMo compliant object to respond_to?(:to_key) and return
# an Enumerable object from that call, or nil if new_record?
- def key
- new_record? ? nil : [ self.id ]
+ # This method also takes custom primary keys specified via
+ # the +set_primary_key+ into account.
+ def to_key
+ new_record? ? nil : [ self.send(self.class.primary_key) ]
end
end
diff --git a/activerecord/test/cases/pk_test.rb b/activerecord/test/cases/pk_test.rb
index 2502c136cc..5bba1d5625 100644
--- a/activerecord/test/cases/pk_test.rb
+++ b/activerecord/test/cases/pk_test.rb
@@ -9,13 +9,18 @@ require 'models/mixed_case_monkey'
class PrimaryKeysTest < ActiveRecord::TestCase
fixtures :topics, :subscribers, :movies, :mixed_case_monkeys
- def test_key
- # test new record
+ def test_to_key_with_default_primary_key
topic = Topic.new
- assert topic.key.nil?
- # test existing record
+ assert topic.to_key.nil?
topic = Topic.find(1)
- assert_equal topic.key, [1]
+ assert_equal topic.to_key, [1]
+ end
+
+ def test_to_key_with_customized_primary_key
+ keyboard = Keyboard.new
+ assert keyboard.to_key.nil?
+ keyboard.save
+ assert_equal keyboard.to_key, [keyboard.id]
end
def test_integer_key