Spec-Zone.ru › Ruby on Rails 6.1

класс ActiveRecord::Type::Value

Родитель:
Объект

Атрибуты

limit[R]
precision[R]
scale[R]

Публичные методы класса

new(precision: nil, limit: nil, scale: nil) Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 8
def initialize(precision: nil, limit: nil, scale: nil)
  @precision = precision
  @scale = scale
  @limit = limit
end

Публичные методы экземпляра

==(other) Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 109
def ==(other)
  self.class == other.class &&
    precision == other.precision &&
    scale == other.scale &&
    limit == other.limit
end
Также алиасирован как: eql?
assert_valid_value(_) Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 121
def assert_valid_value(_)
end
cast(value) Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 45
def cast(value)
  cast_value(value) unless value.nil?
end

Преобразует значение из пользовательского ввода (например, из сеттера). Это значение может быть строкой из генератора формы или объектом Ruby, переданным в сеттер. В настоящее время нет способа отличить, откуда оно получено.

Возвращаемое значение этого метода будет возвращено из ActiveRecord::AttributeMethods::Read#read_attribute. См. также: Value#cast_value.

value Исходные данные, предоставленные для сеттера атрибута.

changed?(old_value, new_value, _new_value_before_type_cast) Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 72
def changed?(old_value, new_value, _new_value_before_type_cast)
  old_value != new_value
end

Определяет, изменилось ли значение для проверки изменённых данных. old_value и new_value всегда будут преобразованы к типу. Типы не должны переопределять этот метод.

changed_in_place?(raw_old_value, new_value) Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 93
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 Текущее значение после преобразования типа.

deserialize(value) Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 31
def deserialize(value)
  cast(value)
end

Преобразует значение из входных данных базы данных в соответствующий тип Ruby. Возвращаемое значение этого метода будет возвращено из ActiveRecord::AttributeMethods::Read#read_attribute. По умолчанию просто вызывает Value#cast.

value Исходные данные, полученные из базы данных.

eql?(other)
Псевдоним для: ==
hash() Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 117
def hash
  [self.class, precision, scale, limit].hash
end
serializable?(value) Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 18
def serializable?(value)
  true
end

Возвращает true, если этот тип может преобразовать value в тип, который может быть использован базой данных. Например, тип boolean может возвращать true если параметр value — Ruby boolean, но может возвращать false если параметр value — какой-либо другой объект.

serialize(value) Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 53
def serialize(value)
  value
end

Преобразует значение из типа Ruby в тип, который база данных понимает. Возвращаемое значение этого метода должно быть String, Numeric, Date, Time, Symbol, true, false, или nil.

Приватные методы экземпляра

cast_value(value) Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 128
def cast_value(value) # :doc:
  value
end

Метод-удобство для типов, которым не требуется отдельное поведение преобразования типа для пользовательского и баз данных ввода. Вызывается Value#cast для значений, кроме nil.

© 2004–2020 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API