2014-01-09 55 views
1

我有一个CompanyArchive模型,它们具有相同的表结构。两种型号都有validates :name, :uniqueness => true验证。验证两个表中的唯一性

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

我假设这是可行的,但我遇到了麻烦,任何人都可以帮忙吗?

+0

尝试添加一个validates_associated:存档到您的Company.rb – Pavan

+0

您可能想要检查first_or_create。这可能是有用的http://stackoverflow.com/questions/16644756/first-or-create-by-email-and-then-save-the-nested-model –

回答

5

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 

要记住,虽然这样的代码级别唯一约束可以在比赛条件下的并行请求中无法正常工作是非常重要的,除非在某种程度上这可以在数据库级别完成。

+0

如果你想学习如何避免竞争条件,看到[这个问题](http://stackoverflow.com/questions/34049308/how-to-avoid-a-race-condition-when-validating-uniqueness-across-two-tables-in-ra?lq=1) –