我遇到Validations的问题,如果我使用以下语法一切都很好(没有失败)。
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) <“已被采取”>预期但是 <“标题必须是唯一的”>。
提前感谢您的帮助。
答案 0 :(得分:1)
下面:
assert_equal "has already been taken", product.errors['title'].join('; ')
您希望在错误哈希中看到“已经采用”,但您已使用自定义消息覆盖此消息。测试显示您的自定义消息显示为应该。为什么你仍然期望默认消息?你必须期待Title must be unique
。
提示请勿在自定义消息中提供字段名称。 Rails会在生成错误时自动处理,例如product.errors.full_messages
(“必须是唯一的”就足够了)。