更新的答案
由于您要存储许多数据列,但每一列只有一种类型,并且您的关注点是严格的表现形式,所以我只会使用装饰器来完成您所需要的。有关使用Draper执行此操作的好方法的示例,请参阅此railscast。
基本上,装饰器使用特定于演示的方法包装您的模型,因此而不是:
#CarsController.rb
def show
@car = Car.find(params[:id])
end
你会用
#CarsController.rb
def show
@car = CarDecorator.find(params[:id])
end
你会像这样定义一个装饰器:
class CarDecorator < ApplicationDecorator
decorates :car
def horsepower
model.power.to_s + "hp" #call to_s just in case
end
end
那么在你看来,任何时候你打电话@car.horsepower
都会得到123hp
而不是123
. 通过这种方式,您可以构建一个很长的可重复使用的表示方法列表。您可以使用继承在对象之间共享方法,也可以允许调用来自原始模型的方法。请参阅 railscast 和文档等。您可以使用 Draper,或者如果您不想使用库,也可以滚动自己的演示者类。
上一个答案(删节):
我可以看到两种不错的简单方法:
units
1)只需为您的数据模型添加一个文本列。IE:获得“400hp”使用[data.value,data.units].join
2)您可以通过拥有一个Units
模型来获得更丰富的关联,也许在ActiveEnum 之类的帮助下。