class ActiveRecord::Type::Value
Тип значения Active Model
Базовый класс для всех типов атрибутов. Этот класс также служит типом по умолчанию для атрибутов, для которых тип не указан.
Атрибуты
Открытые методы класса
# File activemodel/lib/active_model/type/value.rb, line 17 def initialize(precision: nil, limit: nil, scale: nil) super() @precision = precision @scale = scale @limit = limit end
Инициализирует тип с тремя основными параметрами конфигурации: precision, limit и scale. Базовый класс Value не определяет поведение для этих параметров. Они используются только для сравнения на равенство и формирования ключа хеша.
Открытые методы экземпляра
# File activemodel/lib/active_model/type/value.rb, line 121
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 144 def as_json(*) raise NoMethodError end
# File activemodel/lib/active_model/type/value.rb, line 133 def assert_valid_value(_) end
# File activemodel/lib/active_model/type/value.rb, line 57 def cast(value) cast_value(value) unless value.nil? end
Type приводит значение из пользовательского ввода к нужному типу (например, из сеттера). Это значение может быть строкой из построителя формы или объектом Ruby, переданным в сеттер. В настоящее время невозможно определить, из какого источника оно поступило.
Значение, возвращаемое этим методом, будет возвращено из ActiveRecord::AttributeMethods::Read#read_attribute. См. также: Value#cast_value.
value Исходное значение, переданное сеттеру атрибута.
# File activemodel/lib/active_model/type/value.rb, line 84 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 105 def changed_in_place?(raw_old_value, new_value) false end
Определяет, было ли изменено изменяемое значение с момента его чтения. По умолчанию возвращает false. Если ваш тип возвращает объект, который можно изменить, следует переопределить этот метод. Необходимо выполнить одно из следующих действий:
-
передать
new_valueвValue#serializeи сравнить результат сraw_old_value
или
-
передать
raw_old_valueвValue#deserializeи сравнить результат сnew_value
raw_old_value Исходное значение до передачи в deserialize.
new_value Текущее значение после приведения к типу.
# File activemodel/lib/active_model/type/value.rb, line 43 def deserialize(value) cast(value) end
Преобразует значение, полученное из базы данных, в соответствующий тип Ruby. Значение, возвращаемое этим методом, будет возвращено из ActiveRecord::AttributeMethods::Read#read_attribute. Реализация по умолчанию просто вызывает Value#cast.
value Исходное значение, полученное из базы данных.
# File activemodel/lib/active_model/type/value.rb, line 129 def hash [self.class, precision, scale, limit].hash end
# File activemodel/lib/active_model/type/value.rb, line 28 def serializable?(value, &) true end
Возвращает true, если этот тип может преобразовать value в тип, пригодный для использования базой данных. Например, логический тип может вернуть true, если параметр value является логическим значением Ruby, но может вернуть false, если параметр value — какой-либо другой объект.
# File activemodel/lib/active_model/type/value.rb, line 34 def type end
Возвращает уникальное имя типа в виде Symbol. Подклассам следует переопределить этот метод.
Закрытые методы экземпляра
# File activemodel/lib/active_model/type/value.rb, line 152 def cast_value(value) # :doc: value end
Вспомогательный метод для типов, которым не требуется отдельное поведение приведения к типу для пользовательского ввода и ввода из базы данных. Вызывается методом Value#cast для значений, кроме nil.
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.