在RABL模板中,如何舍入一些数字而不是其他数字?

时间:2013-02-10 23:35:26

标签: ruby-on-rails ruby rabl

在我的应用程序的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)而不是其他值(纬度,经度)?

2 个答案:

答案 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模板。