1

在我的应用程序的 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 舍入某些值(条形)而不是其他值(纬度、经度)?

4

2 回答 2

2

To answer your question in your original context, in a RABL template, you'd simply create custom nodes for those attributes that you need additional processing on, e.g.

object @foo
attributes :bar
node(:latitude) { |foo| f.latitude.round(1) }
node(:longitude) { |foo| f.longitude.round(1) }
于 2013-03-08T13:04:01.500 回答
1

听起来您想要做的是创建一个视图模型来为您处理此逻辑。查看draper 宝石

将对象包装在视图模型中允许您定义特定于“显示”对象(在本例中为 JSON 表示)功能的方法。您将在视图模型上定义 bar 方法,该方法相应地对值进行四舍五入。由于 draper 使用装饰器模式,因此您可以免费获得经度和纬度方法,因为它们是底层对象的一部分。然后,您会将您的视图模型传递给 rabl 模板。

于 2013-02-11T01:35:51.153 回答