From 0d1df723c79300b73691d7785ee87d7b74caf591 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Thu, 12 Jan 2012 20:32:11 +0100 Subject: Fix table_name in ActiveRecord with more than one abstract ancestors When subclassing abstract_class table_name should be always computed based on class name, no matter if superclass is subclassing base or another abstract_class. So: class FirstAbstract < ActiveRecord::Base self.abstract_class = true end class SecondAbstract < FirstAbstract self.abstract_class = true end class Post < SecondAbstract self.table_name #=> 'posts' (not 'second_abstracts') end --- activerecord/lib/active_record/model_schema.rb | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'activerecord/lib') diff --git a/activerecord/lib/active_record/model_schema.rb b/activerecord/lib/active_record/model_schema.rb index 36417d89f7..0e8c2c09ce 100644 --- a/activerecord/lib/active_record/model_schema.rb +++ b/activerecord/lib/active_record/model_schema.rb @@ -139,10 +139,14 @@ module ActiveRecord # Computes the table name, (re)sets it internally, and returns it. def reset_table_name #:nodoc: - if superclass.abstract_class? + if abstract_class? + self.table_name = if superclass == Base || superclass.abstract_class? + nil + else + superclass.table_name + end + elsif superclass.abstract_class? self.table_name = superclass.table_name || compute_table_name - elsif abstract_class? - self.table_name = superclass == Base ? nil : superclass.table_name else self.table_name = compute_table_name end -- cgit v1.2.3