Module: ActiveModel::Model

Defined in:
lib/active_model/model.rb

Overview

Active Model Basic Model

Includes the required interface for an object to interact with ActionPack, using different ActiveModel 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 ActiveRecord 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).

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object

:nodoc:



59
60
61
62
63
64
65
66
# File 'lib/active_model/model.rb', line 59

def self.included(base) #:nodoc:
  base.class_eval do
    extend  ActiveModel::Naming
    extend  ActiveModel::Translation
    include ActiveModel::Validations
    include ActiveModel::Conversion
  end
end

Instance Method Details

#initialize(params = {}) ⇒ Object

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


78
79
80
81
82
83
84
# File 'lib/active_model/model.rb', line 78

def initialize(params={})
  params.each do |attr, value|
    self.public_send("#{attr}=", value)
  end if params

  super()
end

#persisted?Boolean

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

Returns:

  • (Boolean)


95
96
97
# File 'lib/active_model/model.rb', line 95

def persisted?
  false
end