Handle alternative base classes in define_attribute_methods
Ref: d429bfb3b6 (r136670440)
This commit is contained in:
parent
e59b779a24
commit
2cd568a5da
@ -365,6 +365,8 @@ def inherited(base) # :nodoc:
|
||||
super
|
||||
base.class_eval do
|
||||
@attribute_method_patterns_cache = nil
|
||||
@aliases_by_attribute_name = nil
|
||||
@generated_attribute_methods = nil
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -115,27 +115,37 @@ def define_attribute_methods # :nodoc:
|
||||
GeneratedAttributeMethods::LOCK.synchronize do
|
||||
return false if @attribute_methods_generated
|
||||
|
||||
superclass.define_attribute_methods unless superclass == Base
|
||||
superclass.define_attribute_methods unless base_class?
|
||||
|
||||
unless abstract_class?
|
||||
load_schema
|
||||
super(attribute_names)
|
||||
end
|
||||
|
||||
ActiveSupport::CodeGenerator.batch(generated_attribute_methods, __FILE__, __LINE__) do |code_generator|
|
||||
aliases_by_attribute_name.each do |old_name, new_names|
|
||||
new_names.each do |new_name|
|
||||
generate_alias_attribute_methods(code_generator, new_name, old_name)
|
||||
end
|
||||
end
|
||||
alias_attribute :id_value, :id if _has_attribute?("id")
|
||||
end
|
||||
|
||||
@attribute_methods_generated = true
|
||||
@alias_attributes_mass_generated = true
|
||||
|
||||
generate_alias_attributes
|
||||
end
|
||||
true
|
||||
end
|
||||
|
||||
def generate_alias_attributes # :nodoc:
|
||||
superclass.generate_alias_attributes unless superclass == Base
|
||||
|
||||
return if @alias_attributes_mass_generated
|
||||
|
||||
ActiveSupport::CodeGenerator.batch(generated_attribute_methods, __FILE__, __LINE__) do |code_generator|
|
||||
aliases_by_attribute_name.each do |old_name, new_names|
|
||||
new_names.each do |new_name|
|
||||
generate_alias_attribute_methods(code_generator, new_name, old_name)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@alias_attributes_mass_generated = true
|
||||
end
|
||||
|
||||
def undefine_attribute_methods # :nodoc:
|
||||
GeneratedAttributeMethods::LOCK.synchronize do
|
||||
super if @attribute_methods_generated
|
||||
|
@ -152,11 +152,6 @@ def inherited(base)
|
||||
@attributes_builder = nil
|
||||
end
|
||||
end
|
||||
|
||||
def load_schema! # :nodoc:
|
||||
super
|
||||
alias_attribute :id_value, :id if @columns_hash.key?("id")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -37,6 +37,7 @@ def setup
|
||||
self.table_name = "topics"
|
||||
end
|
||||
|
||||
new_topic_model.define_attribute_methods
|
||||
assert_includes new_topic_model.attribute_names, "id"
|
||||
assert_includes new_topic_model.attribute_aliases, "id_value"
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user