アプリでrfqモデルを使用しています。 2つのフィールドがあります。一つはneed_reportでブール値です。もう1つはreport_languageで、これは文字列です。ロジックは、need_reportがtrueの場合、report_languageに項目が存在する必要があります。それ以外の場合は、need_reportがfalseの場合、report_languageは空になります。ここでは、コードrfq.rbである:は以下の条件で検証します:if条件が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
エラーがRFQが有効ではないということです。
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)>'
このケースでした"validates:need_report、:presence => true"がモデルから削除された場合に合格します。 need_reportがtrueの場合、report_languageを空にすることはできないようです。
問題についてのご意見はありますか?ありがとう。
validates_presence_ofを使用した後のエラーは同じです... – user938363
この問題は、falseが実際にはゼロであることによって発生します。したがって、検証に失敗します:need_report、:presence => trueおよびレコードを無効にします。 – user938363
。あなたは最初の検証を取り除くことができ、2番目の検証は必要な目的に役立ちます。 – jstim