我使用ActiveRecord在PostgreSQL列中存储一个简单的价格数字,如下所示:
t.decimal :base_price, precision: 9, scale: 2
实际数据中的一切看起来都很准确;如果我存储类似" 5.50"的值,那么它就是" 5.50"。但是,当使用ActiveModelSerializers时,它总是吐出" 5.5",这是预期的,我只想默认将其格式化为货币。我怎么能做到这一点?
2.1.4 :004 > c.base_price
=> #<BigDecimal:7fd3739900e0,'0.55E1',18(18)>
2.1.4 :005 > c.base_price.to_i
=> 5
2.1.4 :006 > c.base_price.to_f
=> 5.5
目前,我在我的Serializer上有一个自定义方法可以确保这一点,但我觉得可能有更好的,更多的Rails-y方式......
def price
"%.2f" % object.base_price
end
答案 0 :(得分:0)
我最终在我的Serailizer中使用了格式,如下所示:
def price
"%.2f" % object.base_price
end
但是,当我在Ember.js项目中使用Ember Data时,我还为我的项目添加了一个转换:
// transforms/currency.js
import DS from 'ember-data';
var format = function(number) {
return parseFloat(number, 10).toFixed(2);
}
export default DS.Transform.extend({
deserialize: function(serialized) {
return format(serialized);
},
serialize: function(deserialized) {
return format(deserialized);
}
});
然后在我的DS.Model中:
basePrice: DS.attr('currency')
这有效地格式化了我在客户端需要的浮点数。