验证两个表的唯一性

时间:2014-01-09 06:11:17

标签: ruby-on-rails validation model ruby-on-rails-4

我有CompanyArchive模型具有相同的表结构。两个模型都有validates :name, :uniqueness => true验证。

在company.rb文件中,我在设置自定义验证时遇到问题,当我向Company数据库添加记录时,它还检查Archive模型(如果记录在具有该名称的存档模型已存在,则不会将其添加到Company表中。

我认为这是可行的,但我在实施方面遇到了麻烦,有人可以帮忙吗?

1 个答案:

答案 0 :(得分:6)

company.rb

validates :name, uniqueness: true

validate :unique_name

def unique_name
  self.errors.add(:name, 'is already taken') if Archive.where(name: self.name).exists?
end

重要的是要记住,这样的代码级别唯一约束可能在并行请求中的竞争条件下不起作用,除非这可以在数据库级别完成。