2014-07-11 64 views
0

我們使用Rails 3.2.18和activerecord-sqlserver-adapter gem。一切都很好,直到我們發現一個小數列被視爲整數的問題。儘管事實上該列有十進制(18,2)類型集,但ActiveRecords將其視爲十進制(18,0),並將該屬性視爲整數。SQL Server 2008 R2的ActiveRecord將十進制(18,2)列看作十進制(18,0)

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

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

有什麼建議嗎?我很樂意至少有一個方向來挖掘這個。

編輯:這是一個傳統的數據庫

+0

映射應該是小數十進制 - http://stackoverflow.com/questions/4685009/rails-3-datatypes。我建議看一下默認值http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html#method-i-column,如果需要覆蓋。 –

+0

@PavelNefyodov,遺憾的是這是遺留數據庫中的現有表,我無法重新創建它。 –

回答

1

好現有的表,以防有人將在同樣的問題絆倒這裏是一個快速破解我想出了。模型保存後,簡單的UPDATE查詢作爲原始SQL發佈。這不能解決問題,但允許使用相同數據庫的傳統應用程序獲取小數(18,2)值。下面是一個查詢碼:從SQL Server

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