0

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

編集:明確にするために、私のモデルはオブジェクトであり、属性はそのオブジェクトのさまざまな測定値です。したがって、モデルと属性列、、、、などがある場合の例ですCar:power戻り、戻りたいなどです。このようにして、次のようなことができます。:torque:weight:wheelbasecar.power.unithpcar.weight.unitlbs.

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

そしてそれは戻ってきます

400hp
4

2 に答える 2

1

更新された回答

多くのデータ列を格納していますが、各列は1つのタイプにすぎず、関心は厳密に表現されているため、必要なことを実現するためにデコレータを使用します。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得るでしょう。このようにして、プレゼンテーションメソッドの大きくて長い再利用可能なリストを作成できます。継承を使用してオブジェクト間でメソッドを共有できます。また、元のモデルのメソッドを呼び出すこともできます。railscastやドキュメントなどを参照してください。Draperを使用することも、ライブラリを使用したくない場合は独自のプレゼンタークラスをロールすることもできます。123hp123


前の回答(要約):

私はこれを行うための2つの素晴らしくて簡単な方法を見ることができます:

units1)データモデルにのテキスト列を追加するだけです。IE:「400hp」を使用するには[data.value,data.units].join

2)おそらくActiveEnumUnitsのようなものの助けを借りて、モデルを持つことで、もう少し豊かな関連付けを得ることができます。

于 2012-04-16T16:52:38.350 に答える
1

forユニットを適用したいメッセージに属性を保存する属性を持つユニットモデルを追加できます。例:

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

これにより、次のようなことが可能になります。

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

これがそれほど有利かどうかはわかりませんが、問題を解決する方法です...

于 2012-04-16T16:54:25.373 に答える