私のRailsアプリケーションでは、ユーザがパーセント値を0.0から100.0の小数で入力できるようにしたいと考えています。データベースでは、0.00から1.00までの小数点として保存したいので、計算が簡単です。Ruby on Railsでgetterとsetterを使ってパーセンテージを表現する
私は現在、このモデルでgettersとsettersを通してこれを行っています。
# in the model `quote.rb`
def discount=(value)
write_attribute :discount, value.to_f/100
end
def discount
read_attribute(:discount).to_f * 100
end
def final_price
price * (1 - discount)
# this generates a wrong value,
# because if the user inputs discount as 50 to represent 50%,
# the final price will be `price * -49`
end
:私はモデルで派生属性を記述するときしかし、その後、彼らは簡単な計算のための0-1の値で、それを格納する目的に反し0-100の値の代わりに、0-1を、使用して終了しますこれを達成するためのより良い方法に関するアイデア?
なぜそれらを0..100の範囲の整数として保存せず、代わりに 'final_price'を' price *(1 - discount/100.0) 'に変更しますか? – tadman
"0-100の代わりに0-100の値を使用することになります。なぜ、オーバーライドされたゲッターを削除して見ないのですか?あるいは、 'final_price'で' read_attribute(:discount) 'を直接使うのがいいですか?または、0-100ゲッター/セッターと0-1カラム(discount_percentageとdiscount_fractionなど)の名前を変えて、必要に応じて両方を使用できるようにしてください。 –
@tadman "なぜそれらを0..100の範囲の整数として保存しないでください - 与えられた理論的根拠は"計算を簡単にする "ことです。実際、いくつかのレポートをどのように簡単に作成できるかがわかりました。 '選択価格*割引AS adjusted_price ...'。 –