Как упростить код моей модели? - PullRequest
1 голос
/ 08 марта 2012

Я новичок в 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 ]

4 голосов
/ 08 марта 2012

Лично я переопределил бы методы получения для цены и количества, чтобы они возвращали ноль, когда не установлены, что позволяет вашим другим методам возвращать действительные результаты, когда значения не установлены, вместо проверки того, что они есть, и возврата nil.

Кроме того, создание метода для предоставления ставки НДС кажется немного излишним для того, что должно быть постоянным. Если оно не является константой, его, вероятно, следует сохранить в БД, чтобы его можно было изменить.

Вот модификация вашей модели, основанная на моих мыслях:

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
4 голосов
/ 08 марта 2012

Я бы сделал:

class Item < ActiveRecord::Base

  VAT_RATE = 0.19

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

  def total_vat
    subtotal * VAT_RATE
  end

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...