2012-03-08 10 views
1

私はRailsのに新しいですし、私は私のモデルから、このコードを単純化するためにどのような方法があるかどうだろう:モデルコードを簡素化するには?

class Item < ActiveRecord::Base 

    def subtotal 
    if price and quantity 
     price * quantity 
    end 
    end 

    def vat_rate 
    if price and quantity 
     0.19 
    end 
    end 

    def total_vat 
    if price and quantity 
     subtotal * vat_rate 
    end 
    end 

end 

私の知る限り* before_filter *は、モデル内で動作しません知っていますか?

私は思い
+1

価格と数量が設定されていないときはnilを返しますか? – apneadiving

答えて

4

class Item < ActiveRecord::Base 

    VAT_RATE = 0.19 

    def subtotal 
    (price || 0) * (quantity || 0) 
    end 

    def total_vat 
    subtotal * VAT_RATE 
    end 

end 
+0

ありがとう、魅力のように動作します! – Tintin81

4

設定されていないとき、彼らはゼロを返すように、個人的に私は何も値が設定されない場合は、あなたの他の方法が有効な結果を返すことを可能にする、価格と数量のgetterメソッドをオーバーライドします彼らがいることをチェックして無しに戻すのではなく。

さらに、VATレートを提供する方法を作成することは、定数であるべきものを少し難しくしているようです。定数でなければ、おそらくDBに格納して変更することができます。ここで

は私の考えに基づいて、モデルの修正です:

class Item < ActiveRecord::Base 
    VAT_RATE = 0.19 

    def price 
    self.price || 0 
    end 

    def quantity 
    self.quantity || 0 
    end 

    def subtotal 
    price * quantity 
    end 

    def total_vat 
    subtotal * VAT_RATE 
    end 
end 
+0

+1ゲッターオーバーライド – apneadiving

+0

同じようにうまくいきます、ありがとうございます。 – Tintin81

関連する問題