Shoulda の validates_presence_of を使用すると、before_validation コールバックでつまずきます。
before_validation :set_document, :set_product, :set_price
私はこの仕様を通過させようとしています:
it { should validate_presence_of(:quantity).with_message("Please a quantity.") }
品目の数量、unit_price、tax_rate、および price のデータベースのデフォルトは 0 です。品目が検証される前に、変更された場合に備えて、他の属性から価格を計算します。
この計算に関係するすべての属性に対して、このエラーと同様のエラーが発生します。
3) LineItem
Failure/Error: it { should validate_presence_of(:quantity).with_message("Please a quantity.") }
NoMethodError:
undefined method `*' for nil:NilClass
# ./app/models/line_item.rb:153:in `total_price'
# ./app/models/line_item.rb:223:in `set_price'
# ./spec/models/line_item_spec.rb:32:in `block (2 levels) in <top (required)>'
私のコールバック、set_price は非常に単純です。
def set_price
self.price = total_price
end
また、total_price メソッドも非常に単純です。
def total_price
quantity * unit_price * (1 + tax_rate/100)
end
私は完全に困惑しているので、これについて何か助けていただければ幸いです。カスタム検証方法について何人かの人々が投稿しているのを見ました。これはとても基本的なことのようで、どう進めればいいのかわかりません。