翻译长度验证器错误消息

时间:2010-12-10 18:15:52

标签: ruby-on-rails ruby-on-rails-3

在Agile Web Development的书中,建议按如下方式进行单元测试:

assert_equal I18n.translate('activerecord.errors.messages.taken'),
             product.errors[:title].join('; ')

我尝试将此用于其他错误消息,例如长度验证器too_short消息,但是获取错误:

assert_equal I18n.translate('activerecord.errors.messages.too_short', :count=>10),
             product.errors[:title].join('; ')

给出:

<"translation missing: en, activerecord, errors, messages, too_short"> expected but was
<"is too short (minimum is 10 characters)">.

快速谷歌搜索建议其他人使用activerecord.errors.messages.too_short,但显然它不起作用。是否有不同的方式来访问消息,我做错了什么?

1 个答案:

答案 0 :(得分:3)

ActiveModel处理大多数错误,因此错误消息位于errors.messages。唯一的例外是taken,因为唯一性验证是ActiveRecord特定的。

所以你需要:

assert_equal I18n.translate('errors.messages.too_short', :count=>10),
             product.errors[:title].join('; ')

以下是消息:https://github.com/rails/rails/blob/master/activemodel/lib/active_model/locale/en.yml