2012-04-16 2 views
0

私は約50列の測定データを持つ1つのモデルを持っています。それぞれ、測定単位(グラム、オンスなど)が異なります。データベースの列と測定単位を関連付ける良い方法は何ですか?これの主な用途は、表示目的のためだけです。 (Ruby on Rails)Rails - 測定単位をデータベース列と関連付けるには良い方法ですか?

編集:私のモデルはオブジェクトであり、属性はそのオブジェクトの異なる測定値です。私はlbs.を返すためにhpcar.weight.unitを返すようにcar.power.unitを望むモデルCarと属性列:power:torque:weight:wheelbase、などを持っていたのであれば、例のようになり、などこのように、私が行うことができるようになりますこのような何か:

<%= car.power + car.power.unit %> 

、それは

400hp 
+0

があなたを行います列は異なる単位で終わるでしょうか?あなたは時には馬力で、時にはワットで「力」を持っているのですか、それぞれの列は常に1つの単位タイプですか? – Andrew

+0

@Andrew - 今のところ、1つのユニットタイプだけが必要です。これは将来の反復で実装されるかもしれませんが、この質問の目的のためには変換を行う必要はありません。 – Nick

+0

ユニットにテーブルを追加し、ユニットのIDを保存するmessurements-tableに「torque_unit」のような列を追加しますか?これにより、同じ属性に対して異なるユニットを扱うことが容易になります。ユニットモデルでは、それらの間にすべてのユニット間変換メソッドを持つことができます... – klump

答えて

1

更新回答

を返します

多くの列のデータを保存していますが、各列は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に電話したときはいつでもあなたの意見で123hp123の代わりに使用します。このようにして、再利用可能な長いプレゼンテーション方法のリストを作成することができます。継承を使用してオブジェクト間でメソッドを共有することができます。また、元のモデルのメソッドも呼び出すことができます。 railscastとdocsなどを参照してください。あなたはDraperを使うことができます。もしあなたがライブラリを使いたくない場合は、あなた自身のプレゼンタークラスを巻くことができます。


前の回答(要約):ちょうどあなたのデータモデルにunitsのテキスト列を追加)

1:

私はこれを行うには、2つの素敵な、簡単な方法を見ることができます。 IE:「400hp」を得るには[data.value,data.units].join

2)ActiveEnumなどの助けを借りて、Unitsモデルを使用することで、より豊富な関連付けを得ることができます。

+0

有望視されています。 – Nick

1

for属性を持つユニットモデルを追加することができます。ここでは、ユニットに適用する属性を保存します。例:

def Unit < ActiveRecord::Base 
    scope :for, lambda{|messurement| find_by_for(messurement.to_s) } 
end 

これはあなたのような詰め込むことができます:

<%= @car.torque + Unit.for(:torque).symbol %> 

私はこれはあまり有利であるならば知っているが、あなたの問題を解決するために、その方法はありません...

+0

主な質問に関する私の新しい編集を見てください - 私は、測定の多くの属性列を持つ1つのモデルを持っています。 – Nick

関連する問題