У меня есть Question
, который has_many :answers
(прямо как ТАК). Я также хочу, чтобы каждый вопрос имел только 1 accepted_answer
, поэтому я просто добавил атрибут :accepted
к модели Answer
, которая является просто логическим значением.
Итак, теперь, чтобы получить принятый ответ на мой вопрос, я написал метод для своей модели, который просто делает это:
def accepted_answer
answers.where(accepted: true)
end
Это позволяет мне выполнять question.accepted_answer
и возвращает объект ActiveRelation, как и следовало ожидать.
Ничего особенного. Просто и эффективно.
Однако я хочу убедиться, что на каждый вопрос может быть только один ответ accepted: true
в любой момент времени.
Как лучше всего подойти к этому?
Я думал об использовании валидатора, но не смог найти такого, который обрабатывал бы связанные объекты таким образом. В некоторых есть интересные фрагменты, но я не могу собрать все воедино. Например, присутствие интересно, как и отсутствие и validates_with (но последнее кажется слишком тяжелым).
Предложения?