module ActiveRecord::Type
Константы
- BigInteger
-
Тип BigInteger Active Model
Тип атрибута для целых чисел, которые можно сериализовать в неограниченное количество байтов. Этот тип зарегистрирован под ключом
:big_integer.class Person include ActiveModel::Attributes attribute :id, :big_integer end person = Person.new person.id = "18_000_000_000" person.id # => 18000000000
Приведение типов и сериализация выполняются так же, как и для стандартного типа
ActiveModel::Type::Integer. - Binary
-
Тип Binary Active Model
Тип атрибута для представления двоичных данных. Этот тип зарегистрирован под ключом
:binary.Значения, не являющиеся строками, преобразуются в строки с помощью метода
to_s. - Boolean
-
Тип Boolean Active Model
Класс, который ведет себя как логический тип, включая правила преобразования пользовательского ввода.
-
"false","f","0",0или любое другое значение изFALSE_VALUESбудет преобразовано вfalse. -
Пустые строки преобразуются в
nil. -
Все остальные значения будут преобразованы в
true.
-
- Decimal
-
Тип Decimal Active Model
Тип атрибута для десятичных чисел с плавающей точкой и высокой точностью. Он зарегистрирован под ключом
:decimal.class BagOfCoffee include ActiveModel::Attributes attribute :weight, :decimal end
Экземпляры
Numericпреобразуются в экземплярыBigDecimal. Любые другие объекты преобразуются с помощью методаto_d, за исключением пустых строк, которые преобразуются вnil. Если методto_dне определен, объект преобразуется в строку с помощьюto_s, после чего выполняется приведение с помощьюto_d.bag = BagOfCoffee.new bag.weight = 0.01 bag.weight # => 0.1e-1 bag.weight = "0.01" bag.weight # => 0.1e-1 bag.weight = "" bag.weight # => nil bag.weight = :arbitrary bag.weight # => nil (the result of `.to_s.to_d`)
Точность
Decimalпо умолчанию равна 18; ее можно настроить при объявлении атрибута:class BagOfCoffee include ActiveModel::Attributes attribute :weight, :decimal, precision: 24 end
- Float
-
Тип Float Active Model
Тип атрибута для числовых значений с плавающей точкой. Он зарегистрирован под ключом
:float.class BagOfCoffee include ActiveModel::Attributes attribute :weight, :float end bag = BagOfCoffee.new bag.weight = "0.25" bag.weight # => 0.25 bag.weight = "" bag.weight # => nil bag.weight = "NaN" bag.weight # => Float::NAN
Значения преобразуются с помощью метода
to_f, за исключением следующих строк:-
Пустые строки преобразуются в
nil. -
"Infinity"преобразуется вFloat::INFINITY. -
"-Infinity"преобразуется в-Float::INFINITY. -
"NaN"преобразуется вFloat::NAN.
-
- ImmutableString
-
Тип ImmutableString Active Model
Тип атрибута для представления неизменяемых строк. Он преобразует входящие значения в замороженные строки.
class Person include ActiveModel::Attributes attribute :name, :immutable_string end person = Person.new person.name = 1 person.name # => "1" person.name.frozen? # => true
Значения преобразуются в строки с помощью метода
to_s. Однако значения типаBooleanобрабатываются иначе:trueпреобразуется в"t", аfalse— в"f". Эти строки можно настроить при объявлении атрибута:class Person include ActiveModel::Attributes attribute :active, :immutable_string, true: "aye", false: "nay" end person = Person.new person.active = true person.active # => "aye"
- Integer
-
Тип 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
- String
-
Тип String Active Model
Тип атрибута для строк. Он зарегистрирован под ключом
:string.Этот класс является специализацией
ActiveModel::Type::ImmutableString. Он выполняет преобразование так же и настраивается так же. Однако он учитывает изменяемые строки, поэтому отслеживание изменений может корректно определять, изменилась ли строка. - Value
-
Тип Value Active Model
Базовый класс для всех типов атрибутов. Этот класс также служит типом по умолчанию для атрибутов, для которых тип не указан.
Публичные методы класса
# File activerecord/lib/active_record/type.rb, line 37 def register(type_name, klass = nil, **options, &block) registry.register(type_name, klass, **options, &block) end
Добавляет новый тип в реестр, позволяя обращаться к нему по символу из ActiveRecord::Base.attribute. Если ваш тип предназначен для использования только с определенным адаптером базы данных, можно передать adapter: :postgresql. Если имя вашего типа совпадает с именем встроенного типа текущего адаптера, будет вызвано исключение, если не указать параметр :override. override: true приведет к тому, что вместо встроенного типа будет использоваться ваш тип. override: false приведет к тому, что при наличии встроенного типа он будет использоваться вместо вашего.
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.