From ebf618b7fc39d66852f666c12b79fd6e71da0e3a Mon Sep 17 00:00:00 2001 From: Marcel Molina Date: Thu, 13 Oct 2005 20:44:39 +0000 Subject: Delegate access to a customized primary key to the conventional id method. Closes #2444. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2569 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/CHANGELOG | 2 ++ activerecord/lib/active_record/base.rb | 2 ++ activerecord/test/pk_test.rb | 4 ++-- 3 files changed, 6 insertions(+), 2 deletions(-) (limited to 'activerecord') diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index 5024362bf5..dc9bb28862 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Delegate access to a customized primary key to the conventional id method. #2444. [Blair Zajac ] + * Fix errors caused by assigning a has-one or belongs-to property to itself * Add ActiveRecord::Base.schema_format setting which specifies how databases should be dumped [Sam Stephenson] diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 3f0201a202..8af2c33ce5 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -1331,6 +1331,8 @@ module ActiveRecord #:nodoc: if @attributes.include?(method_name) define_read_methods if self.class.read_methods.empty? && self.class.generate_read_methods read_attribute(method_name) + elsif self.class.primary_key.to_s == method_name + id elsif md = /(=|\?|_before_type_cast)$/.match(method_name) attribute_name, method_type = md.pre_match, md.to_s if @attributes.include?(attribute_name) diff --git a/activerecord/test/pk_test.rb b/activerecord/test/pk_test.rb index 24f9bc4097..d77982df1b 100644 --- a/activerecord/test/pk_test.rb +++ b/activerecord/test/pk_test.rb @@ -30,10 +30,10 @@ class PrimaryKeysTest < Test::Unit::TestCase assert_equal keyboard.id, Keyboard.find_by_name('HHKB').id end - def test_customized_primary_key_can_be_set_before_saving + def test_customized_primary_key_can_be_get_before_saving keyboard = Keyboard.new assert_respond_to(keyboard, :key_number) - assert_nothing_raised { keyboard.key_number = 1 } + assert_nothing_raised { keyboard.key_number } end def test_customized_string_primary_key_settable_before_save -- cgit v1.2.3