ActiveRecord验证记录子集的唯一性

时间:2016-02-04 16:55:38

标签: ruby-on-rails validation activerecord

我的Contact模型具有email属性。 Contact belongs_to :companyCompany has_many :contacts。我想在Contact上添加唯一性验证,以确保email地址在属于给定Contacts的{​​{1}}子集中是唯一的。换句话说,Company电子邮件ABC-Corp不能包含多个Contact,但foo.bar@example.comABC-Corp都可以与电子邮件{{1}建立联系}}

我认为我需要对Demo-Corp方法使用foo.bar@example.com参数,但是我不能100%确定这是否是我想要的,因为文档没有做到最好的解释它的用法。

2 个答案:

答案 0 :(得分:1)

让我们用这个:

class Contact < ActiveRecord::Base
  # Your code
  validates_uniqueness_of :email, scope: [:company_id]
end

因此,上面的代码只是确保电子邮件对每家公司都是唯一的

答案 1 :(得分:0)

是。您必须使用scope选项。在您的contact模型中,添加以下代码

#contact.rb

validates_uniqueness_of :email, scope: :company_id

为了并发性和完整性,您还需要向unique index表添加contacts,如下所示。

add_index(:contacts, [:email, :company_id], unique: true)