Лично я переопределил бы методы получения для цены и количества, чтобы они возвращали ноль, когда не установлены, что позволяет вашим другим методам возвращать действительные результаты, когда значения не установлены, вместо проверки того, что они есть, и возврата 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