Spec-Zone.ru › Ruby on Rails 7.2

class ActiveRecord::Type::Integer

Parent:
Value
Included modules:
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 51
def initialize(**)
  super
  @range = min_value...max_value
end
Вызывает метод суперкласса

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

deserialize(value) Показать исходный код
# File activemodel/lib/active_model/type/integer.rb, line 60
def deserialize(value)
  return if value.blank?
  value.to_i
end
serializable?(value) { |cast_value| ... } Показать исходный код
# File activemodel/lib/active_model/type/integer.rb, line 74
def serializable?(value)
  cast_value = cast(value)
  in_range?(cast_value) || begin
    yield cast_value if block_given?
    false
  end
end
serialize(value) Показать исходный код
# File activemodel/lib/active_model/type/integer.rb, line 65
def serialize(value)
  return if value.is_a?(::String) && non_numeric_string?(value)
  ensure_in_range(super)
end
Вызывает метод суперкласса
type() Показать исходный код
# File activemodel/lib/active_model/type/integer.rb, line 56
def type
  :integer
end

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

Spec-Zone.ru

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