From ecbde46e572192596df8cad81515f958070c8902 Mon Sep 17 00:00:00 2001 From: Guillermo Iguaran Date: Sat, 14 May 2011 14:15:53 -0500 Subject: [PATCH] Fixing has_many association when ActiveRecord::Base.pluralize_table_names is false. fixes #557 --- .../lib/active_record/associations/alias_tracker.rb | 2 +- .../test/cases/associations/join_model_test.rb | 11 +++++++++++ activerecord/test/models/aircraft.rb | 3 +++ activerecord/test/schema/schema.rb | 4 ++++ 4 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 activerecord/test/models/aircraft.rb diff --git a/activerecord/lib/active_record/associations/alias_tracker.rb b/activerecord/lib/active_record/associations/alias_tracker.rb index 634dee228936d..44e2ee141e483 100644 --- a/activerecord/lib/active_record/associations/alias_tracker.rb +++ b/activerecord/lib/active_record/associations/alias_tracker.rb @@ -50,7 +50,7 @@ def aliased_name_for(table_name, aliased_name = nil) end def pluralize(table_name) - ActiveRecord::Base.pluralize_table_names ? table_name.to_s.pluralize : table_name + ActiveRecord::Base.pluralize_table_names ? table_name.to_s.pluralize : table_name.to_s end private diff --git a/activerecord/test/cases/associations/join_model_test.rb b/activerecord/test/cases/associations/join_model_test.rb index 49a1c117bc973..086654f4cebca 100644 --- a/activerecord/test/cases/associations/join_model_test.rb +++ b/activerecord/test/cases/associations/join_model_test.rb @@ -13,6 +13,8 @@ require 'models/edge' require 'models/book' require 'models/citation' +require 'models/aircraft' +require 'models/engine' class AssociationsJoinModelTest < ActiveRecord::TestCase self.use_transactional_fixtures = false unless supports_savepoints? @@ -704,6 +706,15 @@ def test_has_many_through_goes_through_all_sti_classes assert_equal [9, 10, new_comment.id], authors(:david).sti_post_comments.map(&:id).sort end + def test_has_many_with_pluralize_table_names_false + engine = Engine.create(:car_id => 1) + Aircraft.pluralize_table_names = false + aircraft = Aircraft.create!(:name => "Airbus 380", :id => 1) + assert_equal aircraft.engines, [engine] + ensure + ActiveRecord::Base.pluralize_table_names = true + end + private # create dynamic Post models to allow different dependency options def find_post_with_dependency(post_id, association, association_name, dependency) diff --git a/activerecord/test/models/aircraft.rb b/activerecord/test/models/aircraft.rb new file mode 100644 index 0000000000000..0c47aab539664 --- /dev/null +++ b/activerecord/test/models/aircraft.rb @@ -0,0 +1,3 @@ +class Aircraft < ActiveRecord::Base + has_many :engines, :foreign_key => "car_id" +end diff --git a/activerecord/test/schema/schema.rb b/activerecord/test/schema/schema.rb index c8a98f121d0cb..cb7672cf74f81 100644 --- a/activerecord/test/schema/schema.rb +++ b/activerecord/test/schema/schema.rb @@ -40,6 +40,10 @@ def create_table(*args, &block) t.references :account end + create_table :aircraft, :force => true do |t| + t.string :name + end + create_table :audit_logs, :force => true do |t| t.column :message, :string, :null=>false t.column :developer_id, :integer, :null=>false