модуль 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
Значения преобразуются с помощью метода
to_f, за исключением следующих строк:-
Пустые строки преобразуются в
nil. -
"Infinity"преобразуется вFloat::INFINITY. -
"-Infinity"преобразуется в-Float::INFINITY. -
"NaN"преобразуется вFloat::NAN.bag = BagOfCoffee.new
bag.weight = “0.25” bag.weight # => 0.25
bag.weight = “” bag.weight # => nil
bag.weight = “NaN” bag.weight # => 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.