当用户尝试使用已存在的名称创建记录时,我想显示如下错误消息:
name "some name" has already been taken
我一直在尝试:
validates_uniqueness_of :name, :message => "#{name} has already been taken"
但是这会输出表名而不是name属性的值
答案 0 :(得分:42)
2件事:
%{value}
value
而不是name
,因为在国际化的背景下,您并不真正关心模型的其余部分。所以你的代码应该是:
validates_uniqueness_of :name, :message => '%{value} has already been taken'
答案 1 :(得分:21)
看起来您可以将Proc
传递给邮件。执行此操作时,您将获得两个参数:
:activerecord.errors.models.user.attributes.name.taken
因此,如果在proc上允许两个参数,则可以使用attributes[:value]
项来获取所使用的名称:
validates_uniqueness_of :name,
:message => Proc.new { |error, attributes|
"#{attributes[:value]} has already been taken."
}
答案 2 :(得分:3)
您使用的是什么版本的Rails?
如果Rails 3. ,那么根据我的理解,您应该使用:message => '%{value} has already been taken'
。我不确定Rails 2.3。 - 但无论如何,您可以创建自己的自定义验证来执行您需要的工作。