在應用程序中有rfq模型。有兩個領域。一個是need_report,它是一個布爾值。另一個是report_language,它是一個字符串。邏輯是,如果need_report爲真,那麼report_language中應該有一個條目。否則,如果need_report爲false,則report_language可能爲空。這裏是rfq.rb代碼:通過以下驗證:條件是否在rspec中失敗
validates :need_report, :presence => true
validates_inclusion_of :need_report, :in => [true, false]
validates :report_language, :presence => {:if => :need_report?}
def need_report?
need_report
end
但以下情況的RSpec失敗:
it "should be OK for nil report_language if need_report is false" do
rfq = Factory.build(:rfq, :need_report => false, :report_language => nil)
rfq.should be_valid
end
的錯誤是,詢價無效:
1) Rfq should be OK for nil report_language if need_report is false
Failure/Error: rfq.should be_valid
expected valid? to return true, got false
# ./spec/models/rfq_spec.rb:57:in `block (2 levels) in <top (required)>'
這種情況可能如果「驗證:need_report,:presence => true」,則從模型中刪除。看起來如果need_report是真的,那麼report_language不能爲空。
有關這個問題的任何想法?謝謝。
使用validates_presence_of後的錯誤是一樣的... – user938363 2012-01-10 20:52:54
問題是由於false實際上是零。所以它將失敗驗證:need_report,:presence => true並使記錄無效。準確地說是 – user938363 2012-01-11 04:51:37
。所以你可以擺脫第一次驗證,第二次驗證會達到你需要的目的。 – jstim 2012-01-11 05:27:30