module StiFriendly

Constants

VERSION

Public Instance Methods

change_sti_type(klass) click to toggle source

Public: Замена одного класса на другой с сохранением аттрибутов предыдущего экземпляра класса.

Фиксирование becomes версии 3.1 рельсов:

http://apidock.com/rails/v3.1.0/ActiveRecord/Persistence/becomes

В рельсах более поздних версий, было добавлено копирование ошибок, определение которых основывается не на текущем экземпляре, а на том, что находится в @base у Errors, а он остаётся прежним.

klass - Class, класс в который преобразовывается self.

Returns Instance of klass.

# File lib/sti_friendly.rb, line 26
def change_sti_type(klass)
  became = klass.new
  became.instance_variable_set('@attributes', @attributes)
  became.instance_variable_set('@attributes_cache', @attributes_cache)
  became.instance_variable_set('@new_record', new_record?)
  became.instance_variable_set('@destroyed', destroyed?)
  became.type = klass.name unless self.class.descends_from_active_record?
  became
end