# module ActiveModel::Model

## Active Model Basic Model¶ ↑

Includes the required interface for an object to interact with Action Pack and Action View, using different Active Model modules. It includes model name introspections, conversions, translations and validations. Besides that, it allows you to initialize the object with a hash of attributes, pretty much like Active Record does.

A minimal implementation could be:

    class Person
      include ActiveModel::Model
      attr_accessor :name, :age
    end

    person = Person.new(name: 'bob', age: '18')
    person.name # => "bob"
    person.age  # => "18"

Note that, by default, `ActiveModel::Model` implements `persisted?` to return `false`, which is the most common case. You may want to override it in your class to simulate a different scenario:

    class Person
      include ActiveModel::Model
      attr_accessor :id, :name

      def persisted?
        self.id == 1
      end
    end

    person = Person.new(id: 1, name: 'bob')
    person.persisted? # => true

Also, if for some reason you need to run code on `initialize`, make sure you call `super` if you want the attributes hash initialization to happen.

    class Person
      include ActiveModel::Model
      attr_accessor :id, :name, :omg

      def initialize(attributes={})
        super
        @omg ||= true
      end
    end

    person = Person.new(id: 1, name: 'bob')
    person.omg # => true

For more detailed information on other functionalities available, please refer to the specific modules included in `ActiveModel::Model` (see below).

### Public Class Methods

new(attributes = {}) click to toggle source

Initializes a new model with the given `params`.

    class Person
      include ActiveModel::Model
      attr_accessor :name, :age
    end

    person = Person.new(name: 'bob', age: '18')
    person.name # => "bob"
    person.age  # => "18"

Calls superclass method

    # File lib/active_model/model.rb, line 78
    def initialize(attributes = {})
      assign_attributes(attributes) if attributes

      super()
    end

### Public Instance Methods

persisted?() click to toggle source

Indicates if the model is persisted. Default is `false`.

    class Person
      include ActiveModel::Model
      attr_accessor :id, :name
    end

    person = Person.new(id: 1, name: 'bob')
    person.persisted? # => false

    # File lib/active_model/model.rb, line 93
    def persisted?
      false
    end