更新回答
を返します
多くの列のデータを保存していますが、各列は1つのタイプに過ぎず、厳密にプレゼンテーションが必要なので、必要なものを達成するためにデコレータを使用します。 Draperを使用してこれを行うための良い方法の例については、railscastを参照してください。
class CarDecorator < ApplicationDecorator
decorates :car
def horsepower
model.power.to_s + "hp" #call to_s just in case
end
end
:
#CarsController.rb
def show
@car = Car.find(params[:id])
end
あなたがそうのようなデコレータを定義し
#CarsController.rb
def show
@car = CarDecorator.find(params[:id])
end
を使用します。
基本的には、デコレータはプレゼンテーションの特定のメソッドを持つモデルなので、代わりにラップ
@car.horsepower
に電話したときはいつでもあなたの意見で123hp
を123
の代わりに使用します。このようにして、再利用可能な長いプレゼンテーション方法のリストを作成することができます。継承を使用してオブジェクト間でメソッドを共有することができます。また、元のモデルのメソッドも呼び出すことができます。 railscastとdocsなどを参照してください。あなたはDraperを使うことができます。もしあなたがライブラリを使いたくない場合は、あなた自身のプレゼンタークラスを巻くことができます。
前の回答(要約):ちょうどあなたのデータモデルにunits
のテキスト列を追加)
1:
私はこれを行うには、2つの素敵な、簡単な方法を見ることができます。 IE:「400hp」を得るには[data.value,data.units].join
2)ActiveEnumなどの助けを借りて、Units
モデルを使用することで、より豊富な関連付けを得ることができます。
があなたを行います列は異なる単位で終わるでしょうか?あなたは時には馬力で、時にはワットで「力」を持っているのですか、それぞれの列は常に1つの単位タイプですか? – Andrew
@Andrew - 今のところ、1つのユニットタイプだけが必要です。これは将来の反復で実装されるかもしれませんが、この質問の目的のためには変換を行う必要はありません。 – Nick
ユニットにテーブルを追加し、ユニットのIDを保存するmessurements-tableに「torque_unit」のような列を追加しますか?これにより、同じ属性に対して異なるユニットを扱うことが容易になります。ユニットモデルでは、それらの間にすべてのユニット間変換メソッドを持つことができます... – klump