модуль ActiveModel::Model
Базовый модель ActiveModel
Включает необходимый интерфейс для взаимодействия объекта с ActionPack, используя разные ActiveModel модули. Он включает интроспекцию имени модели, преобразования, переводы и валидации. Кроме того, он позволяет инициализировать объект с хэшем атрибутов, очень похоже на то, как это делает ActiveRecord.
Минимальная реализация может быть такой:
class Person include ActiveModel::Model attr_accessor :name, :age end person = Person.new(name: 'bob', age: '18') person.name # => 'bob' person.age # => 18
Обратите внимание, что по умолчанию ActiveModel::Model реализует persisted? для возвращения false, что является наиболее распространённым случаем. Вы можете переопределить его в своём классе, чтобы смоделировать другую ситуацию:
class Person
include ActiveModel::Model
attr_accessor :id, :name
def persisted?
self.id == 1
end
end
person = Person.new(id: 1, name: 'bob')
person.persisted? # => true
Также, если по какой-то причине вам нужно выполнить код на initialize, убедитесь, что вы вызываете super, если хотите, чтобы инициализация хэша атрибутов произошла.
class Person
include ActiveModel::Model
attr_accessor :id, :name, :omg
def initialize(attributes={})
super
@omg ||= true
end
end
person = Person.new(id: 1, name: 'bob')
person.omg # => true
Для более подробной информации об остальных доступных функциях, пожалуйста, обратитесь к конкретным модулям, включённым в ActiveModel::Model (см. ниже).
Публичные методы класса
Инициализирует новую модель с заданными params.
class Person include ActiveModel::Model attr_accessor :name, :age end person = Person.new(name: 'bob', age: '18') person.name # => "bob" person.age # => 18
# File activemodel/lib/active_model/model.rb, line 78
def initialize(params={})
params.each do |attr, value|
self.public_send("#{attr}=", value)
end if params
super()
end Публичные методы экземпляра
Указывает, сохранена ли модель. По умолчанию false.
class Person include ActiveModel::Model attr_accessor :id, :name end person = Person.new(id: 1, name: 'bob') person.persisted? # => false
# File activemodel/lib/active_model/model.rb, line 95 def persisted? false end
© 2004–2016 David Heinemeier Hansson
Licensed under the MIT License.