ruby-on-rails - Rails - validates_uniqueness_of : access duplicate item?

标签 ruby-on-rails

我有一个基本的 Rails 模型,它有两个属性,namecode。我为 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/

相关文章:

ruby-on-rails - 关联扩展位于何处

ruby-on-rails - Rails after_save 回调创建基于 column_changed 的​​关联模型?

ruby-on-rails - Rails 3 - 在更新之前使用参数检查对象是否有效

ruby-on-rails - 将一堆哈希值写入 json 文件

mysql - 禁用 MySQL 上的 Rails 4.2 小数秒支持

ruby-on-rails - Searchkick rails 地理空间搜索不起作用

ruby-on-rails - 在 rails3 中制作时事通讯的最佳方式是什么

ruby-on-rails - ROR 正则表达式。我正在尝试验证字符串中的第一个和第四个字符是否是 0 或 1 以外的任何数字

ruby-on-rails - 如何处理 Rails 中的散列嵌套键验​​证?

ruby-on-rails - Rails 5 在 Windows 上启动非常慢