Spec-Zone.ru › Ruby on Rails 8.1

модуль ActiveModel::API

Подключенные модули:
ActiveModel::AttributeAssignment, ActiveModel::Validations, ActiveModel::Conversion

API Active Model

Включает интерфейс, необходимый объекту для взаимодействия с Action Pack и Action View, используя различные модули Active Model. Включает интроспекцию имени модели, преобразования, переводы и проверки. Кроме того, позволяет инициализировать объект хешем атрибутов, почти так же, как это делает Active Record.

Минимальная реализация может выглядеть так:

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

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

Обратите внимание, что по умолчанию ActiveModel::API реализует persisted? так, чтобы возвращать false, что является наиболее распространённым случаем. Чтобы смоделировать другой сценарий, можно переопределить этот метод в своём классе:

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

Кроме того, если по какой-либо причине вам нужно выполнить код при инициализации ( ::new ), обязательно вызовите super, если хотите, чтобы произошла инициализация хеша атрибутов.

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

Более подробную информацию о других доступных функциях см. в описании соответствующих модулей, включённых в ActiveModel::API (см. ниже).

Общедоступные методы класса

new (attributes = {}) Показать исходный код
# File activemodel/lib/active_model/api.rb, line 80
def initialize(attributes = {})
  assign_attributes(attributes) if attributes

  super()
end

Инициализирует новую модель с указанными params.

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

person = Person.new(name: 'bob', age: '18')
person.name # => "bob"
person.age  # => "18"
Вызывает метод суперкласса

Общедоступные методы экземпляра

persisted? () Показать исходный код
# File activemodel/lib/active_model/api.rb, line 95
def persisted?
  false
end

Указывает, сохранена ли модель. Значение по умолчанию — false.

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

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

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API