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