From 3828cc8919af94674c9bf38369bb3deae50aa797 Mon Sep 17 00:00:00 2001 From: =?utf-8?q?=E3=81=8B=E3=81=A9=E3=82=84?= Date: Mon, 9 Feb 2009 16:54:35 +0900 Subject: [PATCH] I fixed that type_name_with_modle returns correctly in store_full_sti_class=true --- activerecord/lib/active_record/base.rb | 4 ++-- activerecord/test/cases/base_test.rb | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 78c6ac2..892ac1d 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -1671,8 +1671,8 @@ module ActiveRecord #:nodoc: # Nest the type name in the same module as this class. # Bar is "MyApp::Business::Bar" relative to MyApp::Business::Foo def type_name_with_module(type_name) - if store_full_sti_class - type_name + if store_full_sti_class and type_name.include?(parent.name) + type_name else (/^::/ =~ type_name) ? type_name : "#{parent.name}::#{type_name}" end diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb index 973bb56..95f1f01 100755 --- a/activerecord/test/cases/base_test.rb +++ b/activerecord/test/cases/base_test.rb @@ -1990,6 +1990,13 @@ class BasicsTest < ActiveRecord::TestCase assert_equal '::Person', ActiveRecord::Base.send(:type_name_with_module, '::Person') end + def test_type_name_with_module_should_handle_sti_model + ActiveRecord::Base.store_full_sti_class=true + assert_equal 'ActiveRecord::LoosePerson', ActiveRecord::Base.send(:type_name_with_module, 'LoosePerson') + assert_equal 'ActiveRecord::LooseDescendant', ActiveRecord::Base.send(:type_name_with_module, 'LooseDescendant') + ActiveRecord::Base.store_full_sti_class=false + end + def test_to_param_should_return_string assert_kind_of String, Client.find(:first).to_param end -- 1.6.0.4