Active Model Integer Type¶ ↑
用于整数表示的属性类型。此类型注册在 :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
方法
- D
- N
- S
- T
包含的模块
常量
| DEFAULT_LIMIT | = | 4 |
列存储大小(以字节为单位)。4 字节表示整数,而不是 smallint 等。 |
||
类公共方法
new(**) 链接
来源: 显示 | 在 GitHub 上
# File activemodel/lib/active_model/type/integer.rb, line 52 def initialize(**) super @max = max_value @min = min_value end
实例公共方法
deserialize(value) 链接
来源: 显示 | 在 GitHub 上
# File activemodel/lib/active_model/type/integer.rb, line 62 def deserialize(value) return if value.blank? value.to_i end
serializable?(value) 链接
来源: 显示 | 在 GitHub 上
# File activemodel/lib/active_model/type/integer.rb, line 96 def serializable?(value) cast_value = cast(value) return true unless out_of_range?(cast_value) yield cast_value if block_given? false end
serialize(value) 链接
来源: 显示 | 在 GitHub 上
# File activemodel/lib/active_model/type/integer.rb, line 67 def serialize(value) case value when ::Integer # noop when ::String int = value.to_i if int.zero? && value != "0" return if non_numeric_string?(value) end value = int else value = super end if out_of_range?(value) raise ActiveModel::RangeError, "#{value} is out of range for #{self.class} with limit #{_limit} bytes" end value end
type() 链接
来源: 显示 | 在 GitHub 上
# File activemodel/lib/active_model/type/integer.rb, line 58 def type :integer end