Rails:为什么update_attribute会自动转换类型
Rails: Why does update_attribute automatically convert types
例如,假设我有一个带有整数列的用户模型 'pet_id'。
如果我运行
user = User.new
user.update_attribute(:pet_id, '1')
它会自动将字符串“1”转换为整数 1。此转换在何处进行?
这是负责type_cast
in active record
的方法
def type_cast(value)
return nil if value.nil?
return coder.load(value) if encoded?
klass = self.class
case type
when :string, :text then value
when :integer then klass.value_to_integer(value)
when :float then value.to_f
when :decimal then klass.value_to_decimal(value)
when :datetime, :timestamp then klass.string_to_time(value)
when :time then klass.string_to_dummy_time(value)
when :date then klass.value_to_date(value)
when :binary then klass.binary_to_string(value)
when :boolean then klass.value_to_boolean(value)
else value
end
end
要详细了解rails
activerecord
type_cast
,请访问这三个站点
1) Thoughtbot 博客 How Rails' Type Casting Works
2) 肯·柯林斯 ActiveRecord 4.2's Type Casting
3) Rails activerecord
github
中的类型转换方法
例如,假设我有一个带有整数列的用户模型 'pet_id'。
如果我运行
user = User.new
user.update_attribute(:pet_id, '1')
它会自动将字符串“1”转换为整数 1。此转换在何处进行?
这是负责type_cast
in active record
def type_cast(value)
return nil if value.nil?
return coder.load(value) if encoded?
klass = self.class
case type
when :string, :text then value
when :integer then klass.value_to_integer(value)
when :float then value.to_f
when :decimal then klass.value_to_decimal(value)
when :datetime, :timestamp then klass.string_to_time(value)
when :time then klass.string_to_dummy_time(value)
when :date then klass.value_to_date(value)
when :binary then klass.binary_to_string(value)
when :boolean then klass.value_to_boolean(value)
else value
end
end
要详细了解rails
activerecord
type_cast
,请访问这三个站点
1) Thoughtbot 博客 How Rails' Type Casting Works
2) 肯·柯林斯 ActiveRecord 4.2's Type Casting
3) Rails activerecord
github