更新回答
由於您正在存儲許多列的數據,但每列只有一種類型,並且您的關注僅限於表示形式,所以我只會使用裝飾器來完成您所需的操作。有關使用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或者您可以推出自己的演示者課程。
前面的答案(摘要):
我可以看到兩個漂亮的,簡單的方法來做到這一點:
1)只是爲了units
文本列添加到您的數據模型。 IE:獲得「400hp」使用[data.value,data.units].join
2)通過使用Units
模型,或許可以從ActiveEnum之類的幫助中獲得更多的關聯。
做你的列以不同的單位結束?也就是說,你有時有動力,有時有瓦特,或每列總是一個單位類型? – Andrew 2012-04-16 19:52:39
@Andrew - 目前,只需要一種單位類型。這可能會在未來的迭代中實現,但爲了這個問題的目的,不需要進行任何轉換。 – Nick 2012-04-16 19:57:10
你不能添加一個單位的表格,並添加像「torque_unit」的列到messurements-table,在那裏你保存單位的id?這可以很容易地處理同一屬性的不同單位。在單元模型中,您可以使用所有單元間轉換方法,如果您需要這些... – klump 2012-04-16 21:03:51