Rails: как проверить, что только одна запись на множестве сторон отношения один-ко-многим помечена как первичная - PullRequest
2 голосов
/ 07 августа 2011

У меня есть настройка отношения один ко многим в моем приложении Rails: Person имеет много Addresses. Я добавил в свою таблицу Addresses поле с именем is_primary. Как можно с помощью проверок принудительно установить, что только для одного адреса is_primary установлено в true?

По сути, я хочу сказать: для всех Addresses строк, которые имеют addressable_type из Person и addressable_id из X, только одна может иметь is_primary, установленную в true. Если это не так, отклоните сохранение и выведите ошибку проверки формы.

1 Ответ

0 голосов
/ 07 августа 2011

Не лучше ли добавить новую однозначную связь между Person и Address?Таким образом, вы будете уверены, что может быть только один основной адрес, без необходимости выполнять проверку и обработку ошибок.

class Person
  belongs_to :primary_address, class_name: 'Address'
  has_many :addresses
end

class Address
  belongs_to :person

  def is_primary?
    self.person.primary_address == self
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...