ActiveRecord与SQL Server 2008R2将十进制(18,2)列视为十进制(18,0)

时间:2014-07-11 11:15:06

标签: sql ruby-on-rails ruby sql-server activerecord

我们将Rails 3.2.18与activerecord-sqlserver-adapter gem一起使用。一切都很好,直到我们注意到十进制列被视为整数的问题。尽管列有十进制(18,2)类型集,但ActiveRecords将其视为十进制(18,0),并将属性视为整数。

> Model.columns_hash['decimal_attr'].sql_type
=> "decimal(18,0)"

> Model.columns_hash['decimal_attr'].type
=> :integer

有什么建议吗?我很乐意至少得到一个方向来挖掘它。

编辑:这是旧数据库中的现有表

1 个答案:

答案 0 :(得分:1)

好吧,万一有人会偶然发现同样的问题,我想出了一个快速的黑客攻击。保存模型后,将以原始SQL的形式发出简单的UPDATE查询。这不能解决问题,但允许使用相同db的遗留应用程序获取十进制(18,2)值。以下是查询的代码:

value = ActiveRecord::Base.sanitize(@value)
query = "UPDATE [models] SET [attribute] = #{value} WHERE [models].[id] = #{@model.id}"
Property.connection.execute(query)