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
- ._validators rw
- #_validators readonly
- ._validators? ⇒ Boolean rw
- #_validators? ⇒ Boolean readonly
-
#validation_context
readonly
Returns the context when running validations.
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
-
#persisted? ⇒ Boolean
readonly
Indicates if the model is persisted.
AttributeAssignment
- Included
Instance Method Summary
-
#initialize(attributes = {})
Initializes a new model with the given
params
.
Conversion
- Included
#to_key | Returns an |
#to_model | If your object is already designed to implement all of the Active Model you can use the default |
#to_param | Returns a |
#to_partial_path | Returns a |
Validations
- Included
#errors | Returns the |
#invalid? | Performs the opposite of |
#read_attribute_for_validation | Hook method defining how an attribute value should be retrieved. |
#valid? | Runs all the specified validations and returns |
#validate | Alias for Validations#valid?. |
#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. |
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
# 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
# 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"
# File 'activemodel/lib/active_model/api.rb', line 80
def initialize(attributes = {}) assign_attributes(attributes) if attributes super() end