модуль ActiveModel::API
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 (см. ниже).
Общедоступные методы класса
# 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"
Общедоступные методы экземпляра
# 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.