# module ActiveModel::Conversion

## 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"

### Public Instance Methods

to_key() click to toggle source

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]

    # File lib/active_model/conversion.rb, line 57
    def to_key
      key = respond_to?(:id) && id
      key ? [key] : nil
    end

to_model() click to toggle source

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.

    # File lib/active_model/conversion.rb, line 39
    def to_model
      self
    end

to_param() click to toggle source

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"

    # File lib/active_model/conversion.rb, line 80
    def to_param
      (persisted? && key = to_key) ? key.join("-") : nil
    end

to_partial_path() click to toggle source

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"

    # File lib/active_model/conversion.rb, line 93
    def to_partial_path
      self.class._to_partial_path
    end