2012-05-13 8 views
1

検証に問題があります。次の構文を使用すると、すべてがうまくいっています(失敗なし)。Rails検証とカスタムエラーメッセージ

validates :title, uniqueness: true 

ただし、これに変更するとエラーになります。ここで

validates :title, uniqueness: {message: 'Title must be unique'} 

は、完全性についてテストです:

test "product is not valid without a unique title " do 
    product = Product.new(title: products(:ruby).title, 
    description: "yyy", 
    price: 1, 
    image_url: "fred.gif") 

    assert !product.save 
    assert_equal "has already been taken", product.errors['title'].join('; ') 
end 

私はなどRubyの製品のための本のタイトルを追加して、固定具

を持って、私はそれを理解するように、2つの検証をする必要があります同じ、ちょうど1つはカスタムエラーメッセージを与えます。これは、カスタムメッセージを使用するときに発生するエラーです。

1失敗): test_product_is_not_valid_without_a_unique_title_(ProductTest) <> "すでにとられている" と予想しかし <た "タイトルは一意でなければなりません">。

ご協力いただきありがとうございます。ここで

答えて

1

assert_equal "has already been taken", product.errors['title'].join('; ') 

あなたはハッシュエラーで「すでにとられている」が、あなたはあなたのカスタムメッセージで、このメッセージを上書きしました見て期待しています。テストでは、カスタムメッセージが表示されるように表示されます。なぜあなたはまだデフォルトのメッセージを期待していますか? Title must be uniqueが必要です。

TIPカスタムメッセージにフィールドの名前を指定しないでください。例えば、product.errors.full_messages( "一意である必要があります")でエラーを生成すると、Railsは自動的にこのエラーを処理します。

+0

カスタムメッセージが表示されることは期待できません。重複するタイトルを挿入しない限り、メッセージはまったく期待できません。フィールド名を入力しないでいただきありがとうございます;) – Lee

+0

テストDBが既にフィクスチャでいっぱいですか?既存のタイトルのレコードを作成しようとしているようです。 – jdoe

+0

はい、私はカスタムメッセージを使用しているかどうかにかかわらず、エラーを取得してはいけません。 validates:title、uniqueness:テストを実行しても、本当に失敗する必要があります。フィクスチャがテストデータをDBにロードすると、どちらのvalidates節も失敗をトリガするはずです。私が何かを逃していない限り? – Lee

関連する問題