Validation 如何在ActiveRecord中使用复合键验证模型?

Validation 如何在ActiveRecord中使用复合键验证模型?,validation,activerecord,ruby-on-rails-3,mongoid,Validation,Activerecord,Ruby On Rails 3,Mongoid,我想知道我是否可以编写一个验证来验证基于多个字段的记录的唯一性。我的模型有一个复合主键,即 field :houseno, :type => String field :street, :type => String field :boro, :type => String 验证此记录唯一性的好方法是什么 我尝试使用如下自定义验证器: class AddressValidator < ActiveModel::Validator def validate(reco

我想知道我是否可以编写一个验证来验证基于多个字段的记录的唯一性。我的模型有一个复合主键,即

field :houseno, :type => String
field :street, :type => String
field :boro, :type => String
验证此记录唯一性的好方法是什么

我尝试使用如下自定义验证器:

class AddressValidator < ActiveModel::Validator

  def validate(record)
    record.errors[:base] << "This address is already in our records." unless check(record)
  end

  private
    def check(record)
      Address.find(:street=>record.street,:houseno=>record.houseno,:boro=>record.boro).length > 0
    end
end
class AddressValidatorrecord.houseno,:boro=>record.boro).length>0
结束
结束

您需要使用
范围

validates :houseno, uniqueness: { scope: [:street, :boro] }

谢谢,效果很好。您还可以表示为validates:houseno,:length=>{:minimum=>1,:maximum=>6,:allow_blank=>false,:allow_nil=>true},:university=>{:scope=>[:street,:boro]}