diff options
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/attribute_methods/primary_key.rb | 8 | ||||
-rw-r--r-- | activerecord/test/cases/pk_test.rb | 15 |
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 |