0
当我使用Shoulda的validates_presence_of时,它在一个before_validation回调函数上失败。RSpec Shoulda validates_presence_of nilClass
before_validation :set_document, :set_product, :set_price
我试图让这个规范来传递:
it { should validate_presence_of(:quantity).with_message("Please a quantity.") }
我有一个行项目的数量,UNIT_PRICE,TAX_RATE和价格的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
我很感激任何帮助,因为我'米完全难倒了。我确实看到一些人发布关于自定义验证方法的信息这似乎很基础,我不知道如何继续。
什么是'unit_price'?这可能是'nil' – ck3g 2013-05-08 07:55:19
unit_price的数据库默认值为0,税率,数量和价格也一样。 – 2013-05-08 08:42:05
因此,尝试将这两个字段的日志值设为'nil'。和/或尝试使用'self.quantity'和'self.unit_price' – ck3g 2013-05-08 09:33:22