Как проверить модели с помощью составных ключей в ActiveRecord? - PullRequest
4 голосов
/ 12 января 2011

Я хотел бы знать, смогу ли я написать валидацию, которая проверила бы уникальность записи на основе нескольких полей. Моя модель имеет составной первичный ключ, т.е.

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

1 Ответ

12 голосов
/ 13 января 2011

Вам нужно использовать scope:

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