Module: ActiveRecord::MTI::ModelSchema::ClassMethods

Defined in:
lib/active_record/mti/model_schema.rb

Instance Method Summary collapse

Instance Method Details

#compute_table_nameObject

Computes and returns a table name according to default conventions.



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/active_record/mti/model_schema.rb', line 21

def compute_table_name
  base = base_class
  if self == base
    # Nested classes are prefixed with singular parent table name.
    if parent < Base && !parent.abstract_class?
      contained = parent.table_name
      contained = contained.singularize if parent.pluralize_table_names
      contained += '_'
    end

    "#{full_table_name_prefix}#{contained}#{undecorated_table_name(name)}#{full_table_name_suffix}"
  elsif uses_mti?
    # Nested classes are prefixed with singular parent table name.
    if superclass < Base && !superclass.abstract_class?
      contained = superclass.table_name
      contained = contained.singularize if superclass.pluralize_table_names
      contained += '/'
    end

    "#{full_table_name_prefix}#{contained}#{decorated_table_name(name)}#{full_table_name_suffix}"
  else
    # STI subclasses always use their superclass' table.
    superclass.table_name
  end
end

#reset_table_nameObject

Computes the table name, (re)sets it internally, and returns it.



10
11
12
13
14
15
16
17
18
# File 'lib/active_record/mti/model_schema.rb', line 10

def reset_table_name #:nodoc:
  self.table_name = if abstract_class?
    superclass == Base ? nil : superclass.table_name
  elsif superclass.abstract_class?# || superclass.using_multi_table_inheritance?
    superclass.table_name || compute_table_name
  else
    compute_table_name
  end
end