public Method

Base.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 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. So any change to the attributes in either instance will affect the other.

Source Code

# File active_record/base.rb, line 2015
def becomes(klass)
  returning klass.new do |became|
    became.instance_variable_set("@attributes", @attributes)
    became.instance_variable_set("@attributes_cache", @attributes_cache)
    became.instance_variable_set("@new_record", new_record?)
  end
end
Comments

Have your say
Please use Textile formatting (click here for a cheat sheet). Use <code/> and <pre/> for code samples.
Click here to login with OpenID to to post comments.