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)
序列化
也遵循相同的原则。例如,非数字字符串被序列化为 nil
。
序列化
还验证整数是否可以使用有限数量的字节存储。如果不能,将引发 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 51 def initialize(**) super @range = min_value...max_value end
实例公共方法
deserialize(value) 链接
源代码:显示 | 在 GitHub 上
# File activemodel/lib/active_model/type/integer.rb, line 60 def deserialize(value) return if value.blank? value.to_i end
serializable?(value) 链接
源代码:显示 | 在 GitHub 上
# File activemodel/lib/active_model/type/integer.rb, line 74 def serializable?(value) cast_value = cast(value) in_range?(cast_value) || begin yield cast_value if block_given? false end end
serialize(value) 链接
源代码:显示 | 在 GitHub 上
# File activemodel/lib/active_model/type/integer.rb, line 65 def serialize(value) return if value.is_a?(::String) && non_numeric_string?(value) ensure_in_range(super) end
type() 链接
源代码:显示 | 在 GitHub 上
# File activemodel/lib/active_model/type/integer.rb, line 56 def type :integer end