我有一个基本的 Rails 模型,它有两个属性,name 和 code。我为 code 属性设置了 validates_uniqueness_of。但是,我想自定义 :message 以显示副本的名称。有什么方法可以访问这个重复项吗?
例如,假设我首先输入一条名为 Expired 的记录,代码为 EXP。然后我使用代码 EXP 输入 Experience。我希望 :message 显示类似“代码已被过期”之类的内容。
> m1 = Model.new(:name => 'Expired', :code => 'EXP')
> m2 = Model.new(:name => 'Experience', :code => 'EXP')
> m1.save!
> m2.save!
validates_uniqueness_of :code,
:message => "Code already taken by #{duplicate.name}"
是否有任何内置的 Rails 构造来保存重复的对象,以便我可以像在 :message 中那样访问它?或者有没有其他方法可以运行代码来确定触发此验证时的重复项?
最佳答案
我相信您必须编写自定义验证方法。像这样的东西:
def validate
model = Model.first(:conditions => {:code => self.code})
unless model.blank? && (self.id != model.id)
errors.add_to_base "Code already taken by #{model.name}"
end
end
关于ruby-on-rails - Rails - validates_uniqueness_of : access duplicate item?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3160465/