Active Model Conversion

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"

Methods

Class Public methods

param_delimiter

Accepts a string that will be used as a delimiter of object’s key values in the ‘to_param` method.

📝 Source code
# File activemodel/lib/active_model/conversion.rb, line 32
      class_attribute :param_delimiter, instance_reader: false, default: "-"
🔎 See on GitHub

Instance Public methods

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]
📝 Source code
# File activemodel/lib/active_model/conversion.rb, line 67
    def to_key
      key = respond_to?(:id) && id
      key ? Array(key) : nil
    end
🔎 See on GitHub

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.

📝 Source code
# File activemodel/lib/active_model/conversion.rb, line 49
    def to_model
      self
    end
🔎 See on GitHub

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"
📝 Source code
# 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
🔎 See on GitHub

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"
📝 Source code
# File activemodel/lib/active_model/conversion.rb, line 103
    def to_partial_path
      self.class._to_partial_path
    end
🔎 See on GitHub