Rails验证和自定义错误消息

时间:2012-05-13 15:29:30

标签: ruby-on-rails ruby validation

我遇到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) <“已被采取”>预期但是 <“标题必须是唯一的”>。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

下面:

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

您希望在错误哈希中看到“已经采用”,但您已使用自定义消息覆盖此消息。测试显示您的自定义消息显示为应该。为什么你仍然期望默认消息?你必须期待Title must be unique

提示请勿在自定义消息中提供字段名称。 Rails会在生成错误时自动处理,例如product.errors.full_messages(“必须是唯一的”就足够了)。