123456789_123456789_123456789_123456789_123456789_

Module: ActiveModel::API

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Included In:
ActionText::Attachables::ContentAttachment, ::ActionText::AttachmentGallery, Model, ::ActiveRecord::Base
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Defined in: activemodel/lib/active_model/api.rb

Overview

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::API
  attr_accessor :name, :age
end

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

Note that, by default, API 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::API
  attr_accessor :id, :name

  def persisted?
    self.id.present?
  end
end

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

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

class Person
  include ActiveModel::API
  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 API (see below).

Conversion - Attributes & Methods

Validations - Attributes & Methods

Class Method Summary

Naming - self

param_key

Returns string to use for params names.

plural

Returns the plural class name of a record or class.

route_key

Returns string to use while generating route names.

singular

Returns the singular class name of a record or class.

singular_route_key

Returns string to use while generating route names.

uncountable?

Identifies whether the class name of a record or class is uncountable.

::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 Attribute Summary

Validations - Included

#validation_context

Returns the context when running validations.

AttributeAssignment - Included

Instance Method Summary

Conversion - Included

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

Validations - Included

#errors

Returns the Errors object that holds all information about attribute error messages.

#freeze,
#invalid?

Performs the opposite of valid?.

#read_attribute_for_validation

Hook method defining how an attribute value should be retrieved.

#valid?

Runs all the specified validations and returns true if no errors were added otherwise false.

#validate
#validate!

Runs all the validations within the specified context.

#validates_with

Passes the record off to the class or classes specified and allows them to add errors based on more complex conditions.

#raise_validation_error

AttributeAssignment - Included

#assign_attributes

Allows you to set all the attributes by passing in a hash of attributes with keys matching the attribute names.

#attribute_writer_missing

Like BasicObject#method_missing, #attribute_writer_missing is invoked when #assign_attributes is passed an unknown attribute name.

DSL Calls

included

[ GitHub ]


65
66
67
68
# File 'activemodel/lib/active_model/api.rb', line 65

included do
  extend ActiveModel::Naming
  extend ActiveModel::Translation
end

Class Attribute Details

._validators (rw)

[ GitHub ]

  
# File 'activemodel/lib/active_model/validations.rb', line 50

class_attribute :_validators, instance_writer: false, default: Hash.new { |h, k| h[k] = [] }

._validators?Boolean (rw)

[ GitHub ]

  
# File 'activemodel/lib/active_model/validations.rb', line 50

class_attribute :_validators, instance_writer: false, default: Hash.new { |h, k| h[k] = [] }

.param_delimiter (rw)

[ GitHub ]

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

class_attribute :param_delimiter, instance_reader: false, default: "-"

.param_delimiter?Boolean (rw)

[ GitHub ]

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

class_attribute :param_delimiter, instance_reader: false, default: "-"

Instance Attribute Details

#_validators (readonly)

[ GitHub ]

  
# File 'activemodel/lib/active_model/validations.rb', line 50

class_attribute :_validators, instance_writer: false, default: Hash.new { |h, k| h[k] = [] }

#_validators?Boolean (readonly)

[ GitHub ]

  
# File 'activemodel/lib/active_model/validations.rb', line 50

class_attribute :_validators, instance_writer: false, default: Hash.new { |h, k| h[k] = [] }

#persisted?Boolean (readonly)

Indicates if the model is persisted. Default is false.

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

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

  
# File 'activemodel/lib/active_model/api.rb', line 95

def persisted?
  false
end

Instance Method Details

#initialize(attributes = {})

Initializes a new model with the given params.

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

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

  
# File 'activemodel/lib/active_model/api.rb', line 80

def initialize(attributes = {})
  assign_attributes(attributes) if attributes

  super()
end