2012-03-08 49 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

返回零時的價格和數量都沒有設置? – apneadiving 2012-03-08 11:55:46

回答

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 2012-03-08 12:17:16

4

個人,讓他們返回零沒有設置時,允許在沒有值設置你的其他方法,以返回有效結果我將會覆蓋價格和數量的getter方法而不是檢查它們並返回零。

此外,創建一個方法來提供增值稅率似乎有點矯枉過正應該是一個常數。如果它不是一個常量,那麼它可能應該存儲在數據庫中,以便可以修改它。

這是你的模型的修改基於我的想法:

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 2012-03-08 12:06:20

+0

工作得很好,非常感謝。 – Tintin81 2012-03-08 12:17:35