123456789_123456789_123456789_123456789_123456789_

Module: ActiveModel::Conversion

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Included In:
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Defined in: activemodel/lib/active_model/conversion.rb

Overview

Handles default conversions: to_model, to_key, to_param, and to_partial_path.

Let's take for example this non-persisted object.

class ContactMessage
  include ActiveModel::Conversion

  # ContactMessage are never persisted in the DB
  def persisted?
    false
  end
end

cm = ContactMessage.new
cm.to_model == cm  # => true
cm.to_key          # => nil
cm.to_param        # => nil
cm.to_partial_path # => "contact_messages/contact_message"

Class Method Summary

Instance Method Summary

  • #to_key

    Returns an ::Array of all key attributes if any is set, regardless if the object is persisted or not.

  • #to_model

    If your object is already designed to implement all of the Active Model you can use the default :to_model implementation, which simply returns self.

  • #to_param

    Returns a string representing the object's key suitable for use in URLs, or nil if persisted? is false.

  • #to_partial_path

    Returns a string identifying the path associated with the object.

Instance Method Details

#to_key

Returns an ::Array of all key attributes if any is set, regardless if the object is persisted or not. Returns nil if there are no key attributes.

class Person
  include ActiveModel::Conversion
  attr_accessor :id
end

person = Person.create(id: 1)
person.to_key # => [1]
[ GitHub ]

  
# File 'activemodel/lib/active_model/conversion.rb', line 53

def to_key
  key = respond_to?(:id) && id
  key ? [key] : nil
end

#to_model

If your object is already designed to implement all of the Active Model you can use the default :to_model implementation, which simply returns self.

class Person
  include ActiveModel::Conversion
end

person = Person.new
person.to_model == person # => true

If your model does not act like an Active Model object, then you should define :to_model yourself returning a proxy object that wraps your object with Active Model compliant methods.

[ GitHub ]

  
# File 'activemodel/lib/active_model/conversion.rb', line 39

def to_model
  self
end

#to_param

Returns a string representing the object's key suitable for use in URLs, or nil if persisted? is false.

class Person
  include ActiveModel::Conversion
  attr_accessor :id
  def persisted?
    true
  end
end

person = Person.create(id: 1)
person.to_param # => "1"
[ GitHub ]

  
# File 'activemodel/lib/active_model/conversion.rb', line 71

def to_param
  (persisted? && key = to_key) ? key.join('-') : nil
end

#to_partial_path

Returns a string identifying the path associated with the object. ::ActionPack uses this to find a suitable partial to represent the object.

class Person
  include ActiveModel::Conversion
end

person = Person.new
person.to_partial_path # => "people/person"
[ GitHub ]

  
# File 'activemodel/lib/active_model/conversion.rb', line 84

def to_partial_path
  self.class._to_partial_path
end