Проверка уникальности объединенных полей в DataMapper - PullRequest
3 голосов
/ 28 октября 2010

Я хочу иметь возможность помещать записи в мою базу данных, где производитель будет представлен несколько раз, но не одна и та же комбинация производителя и модели. Так что "Sony (производитель), телевизор (модель)" в порядке "Sony (производитель), OtherTv (модель)", но третья запись "Sony (производитель), телевизор (модель)" не в порядке, так как сочетание производителя и модели не уникален. Я пробовал с проверкой :key => true, но она не работает. И я не могу сделать что-то вроде validates_uniqueness_of :manufacturer AND :model Я думаю. Так как ты это делаешь?

class Tvs
  include DataMapper::Resource

  property :id,           Serial
  property :manufacturer, String, :key => true
  property :model,        String, :key => true

  validates_uniqueness_of :
end

Ответы [ 4 ]

5 голосов
/ 04 ноября 2010

Вы можете использовать:

class Tvs
  include DataMapper::Resource

  property :id,           Serial
  property :manufacturer, String, :unique_index => :manufacturer_model
  property :model,        String, :unique_index => :manufacturer_model

  validates_uniqueness_of :model, :scope => :manufacturer
end

Это также даст вам уникальный индекс в базе данных.

0 голосов
/ 19 февраля 2013

Если вы удалите строку property :id Serial, вы получите составной ключ (Производитель, Модель), который не позволит дублировать Модели для конкретного Производителя.

0 голосов
/ 05 августа 2011
class Tvs
  include DataMapper::Resource

  property :id,           Serial
  property :manufacturer, String, :unique_index => :manufacturer_model
  property :model,        String, :unique_index => :manufacturer_model

  validates_is_unique :model, :scope => :manufacturer
end

Мне нужно было изменить пример, чтобы использовать "validates_is_unique", чтобы заставить это работать.

0 голосов
/ 28 октября 2010

Nevermind.Кажется, это сделало свою работу:

class Tvs
  include DataMapper::Resource

  property :id,           Serial
  property :manufacturer, String, :unique_index => true
  property :model,        String, :unique_index => true

  validates_uniqueness_of :model, :scope => :manufacturer
end
...