validates_uniqueness_of не может проверить несохраненные данные? - PullRequest
0 голосов
/ 21 марта 2011

У меня есть модель под названием Science Subject Choice

class ScienceSubjectChoice < SubjectChoice
    belongs_to :subject
    belongs_to :subject_preference
    validates_associated :subject
    validates_associated :subject_preference
        #TODO: validation
    validates :priority, :presence => true, :numericality => true, :inclusion => {:in => 1..SubjectPreference::MAX_SCIENCE_SUBJECT_CHOICE}

    validates_uniqueness_of :subject_id, :scope => :subject_preference_id
    validates_uniqueness_of :priority, :scope => :subject_preference_id
end

валидатор уникальности не работает с несохраненными данными? Как я могу решить это?

Решение: Вместо проверки самой по себе родительский объект должен выполнить проверку:

def validate_science_subject_choices_uniqueness
    if science_subject_choices.map(&:priority) != science_subject_choices.map(&:priority).uniq
      errors[:base] << "Duplicated priority in science subject"
    end
end

1 Ответ

0 голосов
/ 21 марта 2011

Проверки не работают так. Они динамичны по своей природе. Если вы хотите ограничения базы данных, вы должны указать это в ваших миграциях. Например, a: uniq => true обеспечит уникальность значения в вашей модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...