如何简化我的模型代码?

时间:2012-03-08 11:52:16

标签: ruby-on-rails ruby model

我是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 *在模型中不起作用?

2 个答案:

答案 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