我是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 *在模型中不起作用?
答案 0 :(得分:4)
我会这样做:
class Item < ActiveRecord::Base
VAT_RATE = 0.19
def subtotal
(price || 0) * (quantity || 0)
end
def total_vat
subtotal * VAT_RATE
end
end
答案 1 :(得分:4)
就个人而言,我会覆盖价格和数量的getter方法,以便它们在未设置时返回零,这允许您的其他方法在没有设置值时返回有效结果,而不是检查它们是否返回nil。
此外,创建一种提供增值税税率的方法对于什么应该是常数来说似乎有点过分。如果它不是常数,那么它应该存储在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