class method
self.instantiate
Ruby on Rails 2.2.3
Since v2.2.3 Last seen in v3.1.12 PrivateSignature
self.instantiate(record)
Finder methods must instantiate through this method to work with the single-table inheritance model that makes it possible to create objects of different types from the same table.
Parameters
-
recordreq
Source
# File activerecord/lib/active_record/base.rb, line 1562
def instantiate(record)
object =
if subclass_name = record[inheritance_column]
# No type given.
if subclass_name.empty?
allocate
else
# Ignore type if no column is present since it was probably
# pulled in from a sloppy join.
unless columns_hash.include?(inheritance_column)
allocate
else
begin
compute_type(subclass_name).allocate
rescue NameError
raise SubclassNotFound,
"The single-table inheritance mechanism failed to locate the subclass: '#{record[inheritance_column]}'. " +
"This error is raised because the column '#{inheritance_column}' is reserved for storing the class in case of inheritance. " +
"Please rename this column if you didn't intend it to be used for storing the inheritance class " +
"or overwrite #{self.to_s}.inheritance_column to use another column for that information."
end
end
end
else
allocate
end
object.instance_variable_set("@attributes", record)
object.instance_variable_set("@attributes_cache", Hash.new)
if object.respond_to_without_attributes?(:after_find)
object.send(:callback, :after_find)
end
if object.respond_to_without_attributes?(:after_initialize)
object.send(:callback, :after_initialize)
end
object
end
Defined in activerecord/lib/active_record/base.rb line 1562
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActiveRecord::Base