Spec-Zone.ru › Ruby on Rails 8.1

класс ActiveRecord::Type::Integer

Подключенные модули:
ActiveModel::Type::Helpers::Immutable, ActiveModel::Type::Helpers::Numeric

Целочисленный тип Active Model

Тип атрибута для представления целых чисел. Этот тип зарегистрирован под ключом :integer.

class Person
  include ActiveModel::Attributes

  attribute :age, :integer
end

Значения приводятся с помощью метода to_i, за исключением пустых строк, которые приводятся к nil. Если метод to_i не определён или вызывает ошибку, значение будет приведено к nil.

person = Person.new

person.age = "18"
person.age # => 18

person.age = ""
person.age # => nil

person.age = :not_an_integer
person.age # => nil (because Symbol does not define #to_i)

Serialization также работает по тому же принципу. Например, нечисловые строки сериализуются как nil.

Serialization также проверяет, что целое число можно сохранить, используя ограниченное количество байтов. Если это невозможно, будет вызвано исключение ActiveModel::RangeError. По умолчанию ограничение составляет 4 байта; его можно настроить при объявлении атрибута:

class Person
  include ActiveModel::Attributes

  attribute :age, :integer, limit: 6
end

Константы

DEFAULT_LIMIT

Размер хранилища столбца в байтах. 4 байта означают целое число, в отличие от smallint и т. д.

Открытые методы класса

new (**) Показать исходный код
# File activemodel/lib/active_model/type/integer.rb, line 52
def initialize(**)
  super
  @max = max_value
  @min = min_value
end
Вызывает метод суперкласса

Открытые методы экземпляра

deserialize (value) Показать исходный код
# File activemodel/lib/active_model/type/integer.rb, line 62
def deserialize(value)
  return if value.blank?
  value.to_i
end
serializable? (value) { |cast_value| ... } Показать исходный код
# File activemodel/lib/active_model/type/integer.rb, line 96
def serializable?(value)
  cast_value = cast(value)
  return true unless out_of_range?(cast_value)
  yield cast_value if block_given?
  false
end
serialize (value) Показать исходный код
# File activemodel/lib/active_model/type/integer.rb, line 67
def serialize(value)
  case value
  when ::Integer
    # noop
  when ::String
    int = value.to_i
    if int.zero? && value != "0"
      return if non_numeric_string?(value)
    end
    value = int
  else
    value = super
  end

  if out_of_range?(value)
    raise ActiveModel::RangeError, "#{value} is out of range for #{self.class} with limit #{_limit} bytes"
  end

  value
end
Вызывает метод суперкласса
type () Показать исходный код
# File activemodel/lib/active_model/type/integer.rb, line 58
def type
  :integer
end

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

Spec-Zone.ru

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