【问题标题】:ActiveRecord validate uniqueness against subset of recordsActiveRecord 针对记录子集验证唯一性
【发布时间】:2016-02-04 16:55:38
【问题描述】:

我有一个具有email 属性的Contact 模型。 Contactbelongs_to :companyCompanyhas_many :contacts。我想在Contact 上添加唯一性验证,以确保email 地址在属于给定CompanyContacts 子集中是唯一的。换句话说,ABC-Corp 不能有多个Contact 与电子邮件foo.bar@example.com,但ABC-CorpDemo-Corp 都可以与电子邮件foo.bar@example.com 联系。

我认为我需要为 validates_uniqueness_of 方法使用 scope 参数,但是我不能 100% 确定这是否是我想要的,因为文档没有很好地解释它的用法。

【问题讨论】:

    标签: ruby-on-rails validation activerecord


    【解决方案1】:

    让我们使用这个:

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

    所以上面的代码只是确保每个公司的电子邮件都是唯一的

    【讨论】:

      【解决方案2】:

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

      #contact.rb
      
      validates_uniqueness_of :email, scope: :company_id
      

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

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

      【讨论】:

        猜你喜欢
        • 2013-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-21
        • 1970-01-01
        • 2019-06-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多