класс ActiveRecord::Type::Value
Атрибуты
Публичные методы класса
# File activemodel/lib/active_model/type/value.rb, line 6 def initialize(precision: nil, limit: nil, scale: nil) @precision = precision @scale = scale @limit = limit end
Публичные методы экземпляра
# File activemodel/lib/active_model/type/value.rb, line 91
def ==(other)
self.class == other.class &&
precision == other.precision &&
scale == other.scale &&
limit == other.limit
end # File activemodel/lib/active_model/type/value.rb, line 103 def assert_valid_value(*) end
# File activemodel/lib/active_model/type/value.rb, line 35 def cast(value) cast_value(value) unless value.nil? end
Преобразует тип значения из пользовательского ввода (например, из сетера). Это значение может быть строкой из генератора формы или объектом Ruby, переданным в сетер. В настоящее время нет способа отличить, откуда оно исходит.
Значение, возвращаемое этим методом, будет возвращено из ActiveRecord::AttributeMethods::Read#read_attribute. См. также: #cast_value.
value Исходное сырое значение, предоставленное в сетере атрибута.
# File activemodel/lib/active_model/type/value.rb, line 62 def changed?(old_value, new_value, _new_value_before_type_cast) old_value != new_value end
Определяет, изменилось ли значение для проверки состояния изменений. old_value и new_value всегда будут преобразованы к типу. Типы не должны переопределять этот метод.
# File activemodel/lib/active_model/type/value.rb, line 83 def changed_in_place?(raw_old_value, new_value) false end
Определяет, было ли значение изменяемого типа изменено с момента его чтения. По умолчанию возвращает false. Если ваш тип возвращает объект, который может быть изменён, необходимо переопределить этот метод. Вам нужно либо:
-
передать
new_valueв #serialize и сравнить его сraw_old_value
или
-
передать
raw_old_valueв #deserialize и сравнить его сnew_value
raw_old_value Исходное значение до передачи в deserialize
new_value Текущее значение после преобразования типа.
# File activemodel/lib/active_model/type/value.rb, line 21 def deserialize(value) cast(value) end
Преобразует значение из ввода базы данных в соответствующий тип Ruby. Значение, возвращаемое этим методом, будет возвращено из ActiveRecord::AttributeMethods::Read#read_attribute. По умолчанию реализация просто вызывает #cast.
value Сырые данные ввода, полученные из базы данных.
# File activemodel/lib/active_model/type/value.rb, line 99 def hash [self.class, precision, scale, limit].hash end
# File activemodel/lib/active_model/type/value.rb, line 43 def serialize(value) value end
Преобразует значение из типа Ruby в тип, который база данных знает, как понимать. Возвращаемое значение этого метода должно быть String, Numeric, Date, Time, Symbol, true, false, или nil.
Приватные методы экземпляра
# File activemodel/lib/active_model/type/value.rb, line 111 def cast_value(value) # :doc: value end
Удобный метод для типов, которым не требуется отдельное поведение преобразования типов для пользовательского и баз данных ввода. Вызывается методом #cast для значений, кроме nil.
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.