class ActiveRecord::Type::Integer
Тип целых чисел 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 и т. д.
Публичные методы класса
# File activemodel/lib/active_model/type/integer.rb, line 51 def initialize(**) super @range = min_value...max_value end
Публичные методы экземпляра
# File activemodel/lib/active_model/type/integer.rb, line 60 def deserialize(value) return if value.blank? value.to_i end
# 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 # 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
# File activemodel/lib/active_model/type/integer.rb, line 56 def type :integer end
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.