如何自定义rails activerecordvalidation错误消息以显示属性值
当用户尝试使用已存在的名称创建记录时,我想显示如下错误消息:
name "some name" has already been taken
我一直在努力做到:
validates_uniqueness_of :name, :message => "#{name} has already been taken"
但是这会输出表名而不是name属性的值
2件事:
- validation消息使用Rails I18n样式插值 ,即
%{value}
- 关键是
value
而不是name
,因为在国际化的背景下,你并不真正关心模型的其余部分。
所以你的代码应该是:
validates_uniqueness_of :name, :message => '%{value} has already been taken'
看起来你可以将Proc
传递给消息。 执行此操作时,您将获得两个参数:
- 沿着以下行的符号
:activerecord.errors.models.user.attributes.name.taken
- 看起来像`{:model =>“User”,:attribute =>“Name”,:value =>“My Name”}的哈希
因此,如果在proc上允许两个参数,则可以使用attributes[:value]
项来获取所使用的名称:
validates_uniqueness_of :name, :message => Proc.new { |error, attributes| "#{attributes[:value]} has already been taken." }
你用的是什么版本的Rails?
如果Rails 3.然后据我所知你应该使用:message => '%{value} has already been taken'
。 我不确定Rails 2.3。 – 但无论如何,您可以创建自己的自定义validation,以执行您所需的操作。