Spec-Zone.ru › Ruby on Rails 4.1

модуль ActiveModel::Model

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

Базовый модель 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 (см. ниже).

Публичные методы класса

new(params={}) Показать исходный код

Инициализирует новую модель с заданными 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

Публичные методы экземпляра

persisted?() Показать исходный код

Указывает, сохранена ли модель. По умолчанию 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.

Spec-Zone.ru

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