123456789_123456789_123456789_123456789_123456789_

Module: ActiveModel::API

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Included In:
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

Callbacks - self

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.

extended, model_name_from_record_or_class

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

append_features, prepend_features

Instance Attribute Summary

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::HelperMethods - self

#validates_absence_of

Validates that the specified attributes are blank (as defined by Object#present?).

#validates_acceptance_of

Encapsulates the pattern of wanting to validate the acceptance of a terms of service check box (or similar agreement).

#validates_comparison_of

Validates the value of a specified attribute fulfills all defined comparisons with another value, proc, or attribute.

#validates_confirmation_of

Encapsulates the pattern of wanting to validate a password or email address field with a confirmation.

#validates_exclusion_of

Validates that the value of the specified attribute is not in a particular enumerable object.

#validates_format_of

Validates whether the value of the specified attribute is of the correct form, going by the regular expression provided.

#validates_inclusion_of

Validates whether the value of the specified attribute is available in a particular enumerable object.

#validates_length_of

Validates that the specified attributes match the length restrictions supplied.

#validates_numericality_of

Validates whether the value of the specified attribute is numeric by trying to convert it to a float with Kernel.Float (if only_integer is false) or applying it to the regular expression /\A[+\-]?\d+\z/ (if only_integer is set to true).

#validates_presence_of

Validates that the specified attributes are not blank (as defined by Object#blank?).

#validates_size_of
#_merge_attributes

Validations - Included

#errors

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

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

#init_internals, #raise_validation_error, #run_validations!,
#initialize_dup

Clean the Errors object if instance is duped.

AttributeAssignment - Included

#assign_attributes

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

#_assign_attribute, #_assign_attributes

ForbiddenAttributesProtection - Included

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 71

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 71

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 71

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 71

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

#validation_context (rw)

Returns the context when running validations.

This is useful when running validations except a certain context (opposite to the on option).

class Person
  include ActiveModel::Validations

  attr_accessor :name
  validates :name, presence: true, if: -> { validation_context != :custom }
end

person = Person.new
person.valid?          #=> false
person.valid?(:new)    #=> false
person.valid?(:custom) #=> true
[ GitHub ]

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

rdoc_method :method: validation_context

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