123456789_123456789_123456789_123456789_123456789_

Module: ActiveModel::Conversion

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Included In:
ActionText::Attachables::ContentAttachment, ::ActionText::AttachmentGallery, API, Model, ::ActiveRecord::Base
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

::ActiveSupport::Concern - Extended

class_methods

Define class methods from given block.

included

Evaluate given block in context of base class, so that you can write class macros here.

prepended

Evaluate given block in context of base class, so that you can write class macros here.

Instance Method Summary

  • #to_key

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

  • #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.

DSL Calls

included

[ GitHub ]


27
28
29
30
31
32
33
# File 'activemodel/lib/active_model/conversion.rb', line 27

included do
  ##
  # :singleton-method:
  #
  # Accepts a string that will be used as a delimiter of object's key values in the `to_param` method.
  class_attribute :param_delimiter, instance_reader: false, default: "-"
end

Instance Method Details

#to_key

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

class Person
  include ActiveModel::Conversion
  attr_accessor :id

  def initialize(id)
    @id = id
  end
end

person = Person.new(1)
person.to_key # => [1]
[ GitHub ]

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

def to_key
  key = respond_to?(:id) && id
  key ? Array(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 49

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 initialize(id)
    @id = id
  end

  def persisted?
    true
  end
end

person = Person.new(1)
person.to_param # => "1"
[ GitHub ]

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

def to_param
  (persisted? && (key = to_key) && key.all?) ? key.join(self.class.param_delimiter) : 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 103

def to_partial_path
  self.class._to_partial_path
end