1

次の構文を使用すると、検証に問題が発生します(失敗はありません)。

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)<"すでに取得済み">が予想されましたが、<"タイトルは一意である必要があります">。

よろしくお願いします。

4

1 に答える 1

1

ここ:

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

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

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

于 2012-05-13T16:04:59.453 に答える