【问题标题】:How to validate models with a composite keys in ActiveRecord?如何在 ActiveRecord 中使用复合键验证模型?
【发布时间】:2011-01-12 20:42:54
【问题描述】:

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

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

【问题讨论】:

    标签: validation activerecord ruby-on-rails-3 mongoid


    【解决方案1】:

    你需要使用scope:

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

    【讨论】:

    • 谢谢,效果很好。您也可以表示为 validates :houseno, :length => { :minimum => 1, :maximum => 6, :allow_blank => false, :allow_nil => true }, :uniqueness => { :scope => [:街道,:boro] }
    猜你喜欢
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多