我有一个Company
和Archive
模型,它们具有相同的表结构。两种型号都有validates :name, :uniqueness => true
验证。验证两个表中的唯一性
在company.rb文件中,我在设置自定义验证时出现问题,当我向Company
数据库添加记录时,它还检查Archive
模型(因此如果具有该名称的存档模型中的记录已经存在那么它将不会被添加到Company
表中)。
我假设这是可行的,但我遇到了麻烦,任何人都可以帮忙吗?
我有一个Company
和Archive
模型,它们具有相同的表结构。两种型号都有validates :name, :uniqueness => true
验证。验证两个表中的唯一性
在company.rb文件中,我在设置自定义验证时出现问题,当我向Company
数据库添加记录时,它还检查Archive
模型(因此如果具有该名称的存档模型中的记录已经存在那么它将不会被添加到Company
表中)。
我假设这是可行的,但我遇到了麻烦,任何人都可以帮忙吗?
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
要记住,虽然这样的代码级别唯一约束可以在比赛条件下的并行请求中无法正常工作是非常重要的,除非在某种程度上这可以在数据库级别完成。
如果你想学习如何避免竞争条件,看到[这个问题](http://stackoverflow.com/questions/34049308/how-to-avoid-a-race-condition-when-validating-uniqueness-across-two-tables-in-ra?lq=1) –
尝试添加一个validates_associated:存档到您的Company.rb – Pavan
您可能想要检查first_or_create。这可能是有用的http://stackoverflow.com/questions/16644756/first-or-create-by-email-and-then-save-the-nested-model –