在我的应用程序的JSON输出中,我需要将大多数非整数(即浮点)数值显示四舍五入到一个小数位,即1.7777将显示为1.8。
我通过猴子修补Float的as_json方法完成了这个:
class Float
def as_json(options={})
self.round 1
end
end
我甚至不确定这是不是一个好主意,我刚刚完成它,因为我无法指出在我的RABL模板中指定数值的格式。
但是现在我还需要显示某些值(纬度和经度)而不进行任何舍入:
object @foo
attributes :bar, :latitude, :longitude
如何告诉RABL舍入某些值(bar)而不是其他值(纬度,经度)?
答案 0 :(得分:2)
要在原始上下文中回答您的问题,在RABL模板中,您只需为需要进行额外处理的属性创建自定义节点,例如
object @foo
attributes :bar
node(:latitude) { |foo| f.latitude.round(1) }
node(:longitude) { |foo| f.longitude.round(1) }
答案 1 :(得分:1)
听起来你想要做的就是创建一个视图模型来为你处理这个逻辑。查看draper gem。
在视图模型中包装对象允许您定义特定于“显示”对象(在本例中为其JSON表示)的功能的方法。您可以在视图模型上定义bar方法,该方法相应地舍入值。由于draper使用了Decorator模式,因此您可以免费获得经度和纬度方法,因为它们是您的基础对象的一部分。然后,您将视图模型传递给rabl模板。