mirror of
https://github.com/github/rails.git
synced 2026-02-19 02:14:20 -05:00
Optimize instantiation of STI subclass records. In partial fullfilment of #1236.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2511 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
*SVN*
|
||||
|
||||
* Optimize instantiation of STI subclass records. In partial fullfilment of #1236. [skaes@web.de]
|
||||
|
||||
* Fix typo of 'constrains' to 'contraints'. #2069. [Michael Schuerig <michael@schuerig.de>]
|
||||
|
||||
* Optimization refactoring for add_limit_offset!. In partial fullfilment of #1236. [skaes@web.de]
|
||||
|
||||
@@ -782,22 +782,25 @@ module ActiveRecord #:nodoc:
|
||||
# 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.
|
||||
def instantiate(record)
|
||||
subclass_name = record[inheritance_column]
|
||||
require_association_class(subclass_name)
|
||||
|
||||
object = if subclass_name.blank?
|
||||
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."
|
||||
object =
|
||||
if subclass_name = record[inheritance_column]
|
||||
if subclass_name.empty?
|
||||
allocate
|
||||
else
|
||||
require_association_class(subclass_name)
|
||||
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
|
||||
else
|
||||
allocate
|
||||
end
|
||||
end
|
||||
|
||||
object.instance_variable_set("@attributes", record)
|
||||
object
|
||||
|
||||
Reference in New Issue
Block a user