instance method becomes

Ruby on Rails edge

Since v3.0.20

Available in: v3.0.20 v3.1.12 v3.2.22.5 v4.0.13 v4.1.16 v4.2.11.3 v5.0.7.2 v5.1.7 v5.2.8.1 v6.0.6.1 v6.1.7.10 v7.0.10 v7.1.6 v7.2.4 v8.0.5.1 v8.1.4 edge

Signature

becomes(klass)

Returns an instance of the specified klass with the attributes of the

current record. This is mostly useful in relation to single table
inheritance (STI) structures where you want a subclass to appear as the
superclass. This can be used along with record identification in
Action Pack to allow, say, `Client < Company` to do something
like render `partial: @client.becomes(Company)` to render that
instance using the companies/company partial instead of clients/client.

Note: The new instance will share a link to the same attributes as the original class.
Therefore the STI column value will still be the same.
Any change to the attributes on either instance will affect both instances.
This includes any attribute initialization done by the new instance.

If you want to change the STI column as well, use #becomes! instead.

: [Klass] (Class) -> Klass

Parameters

klass req
Source
# File activerecord/lib/active_record/persistence.rb, line 474
    def becomes(klass)
      return clone if self.class == klass

      became = klass.allocate

      became.send(:initialize) do |becoming|
        @attributes.reverse_merge!(becoming.instance_variable_get(:@attributes))
        becoming.instance_variable_set(:@attributes, @attributes)
        becoming.instance_variable_set(:@mutations_from_database, @mutations_from_database ||= nil)
        becoming.instance_variable_set(:@new_record, new_record?)
        becoming.instance_variable_set(:@previously_new_record, previously_new_record?)
        becoming.instance_variable_set(:@destroyed, destroyed?)
        becoming.instance_variable_set(:@marked_for_destruction, marked_for_destruction?)
        becoming.errors.copy!(errors)
      end

      became
    end

Defined in activerecord/lib/active_record/persistence.rb line 474 · View on GitHub · Improve this page · Find usages on GitHub

Defined in ActiveRecord::Persistence

Type at least 2 characters to search.

Use the arrow keys to navigate results, Enter to open one, Escape to close.

Keyboard shortcuts

/
Focus search
⌘K / Ctrl-K
Command palette
?
This help
Esc
Close