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 产品等添加书名。

据我了解,这两个验证应该是相同的,只是一个给出了自定义错误消息。这是我在使用自定义消息时遇到的错误。

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 回答