2013-05-08 2 views
0

Shoulda의 validates_presence_of를 사용할 때 before_validation 콜백이 발생합니다. RSpec은 nilClass의 validates_presence_of를 사용합니다.

before_validation :set_document, :set_product, :set_price 

내가 전달하는이 스펙을 얻으려고 :

it { should validate_presence_of(:quantity).with_message("Please a quantity.") } 

나는 광고 항목의 수량, UNIT_PRICE, TAX_RATE, 가격 0의 데이터베이스 기본값을 가지고있다. 광고 항목의 유효성을 검사하기 전에 다른 속성의 가격이 변경된 경우에 대비해 가격을 계산합니다. TOTAL_PRICE 방법은

def set_price 
    self.price = total_price 
end 

그리고 :

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는 콜백 매우 간단 내 :

나는이 계산에 포함 된 모든 속성에 대해이 오류와 유사한 오류가 발생할 수 매우 간단합니다 :

나는 이걸로 어떤 도움을 주셔서 감사합니다. 완전히 뒤죽박죽. 사용자 지정 유효성 검사 방법에 대한 게시물을 보았습니다. 이것은 아주 기본적인 것처럼 보입니다. 나는 어떻게 진행해야하는지 알 수 없습니다.

+0

'unit_price'란 무엇입니까? 그것은 아마도'nil' 일 것입니다. – ck3g

+1

unit_price는 tax_rate, 수량 및 가격처럼 db 기본값 0을 갖습니다. –

+0

따라서이 두 필드의 로그 값에'nil'을 시도해보십시오. 그리고/또는'self.quantity'와'self.unit_price'를 사용하려고 시도하십시오 – ck3g

답변

0

total_price 이후 실행 검증하기 전에, quantity 콜백이 실행되는 시간에 nil 될 수 있습니다. 사실 Shoulda 매처가 실행될 때 장면 뒤에서 어떤 일이 발생하는지는 오류입니다. 메소드를 quantity (nil)으로 보내려고합니다.

대신 after_validation 또는 before_save을 사용하십시오.

관련 문제