Rails 2.3唯一性验证 - 如何捕获导致错误的值

时间:2010-05-12 06:56:51

标签: ruby-on-rails validation activerecord

我正在尝试捕获抛出唯一性错误的值(或者就此而言,任何其他类型的内置验证)以在:message选项中显示它。这是我尝试过的(不起作用)

# inside the model
validate_uniqueness_of :name, :message => "#{name} has already been taken" # also tried using #{:name}

我可以使用自定义验证,但这超过了使用已集成到AR中的内容的重点。有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:1)

尝试这种插值技术:

validate_uniqueness_of :name, :message => "%{value} has already been taken"

Active Record Validations and Callbacks的RailsGuide示例显示了在自定义错误消息中插入%{value}的示例:

:message => "%{value} is not a valid size"

我查看了validates_each文档,可以看到validate块传递了三个属性:|record, attr, value|。可以使用%{model}%{attribute}%{value}访问这三个。

虽然这是有限的,因为它只允许您访问三个属性,幸好这就是您所需要的。

答案 1 :(得分:0)

尝试使用self.name

validates_uniqueness_of :name, :message => "#{self.name} has already been taken" # also tried using #{:name}

同样 validate_uniqueness_of 错误应该是 validates_uniqueness_of

如果这不起作用,请使用验证方法和注释行validates_uniqueness_of

 def validate
    name= User.find_by_name(self.name) #Assuming User is your Model Name
    unless name.blank?
      self.errors.add :base, "#{self.name} has already been taken"
    end
 end