Ruby on rails 验证can和x27的唯一性;不检查未保存的数据?

Ruby on rails 验证can和x27的唯一性;不检查未保存的数据?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我有一个名为“科学学科选择”的模型 class ScienceSubjectChoice < SubjectChoice belongs_to :subject belongs_to :subject_preference validates_associated :subject validates_associated :subject_preference #TODO: validation validates :priorit

我有一个名为“科学学科选择”的模型

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
课堂科学主题选择true,:numericality=>true,:inclusion=>1..SubjectPreference::MAX\u SCIENCE\u SUBJECT\u CHOICE}
验证以下项的唯一性::subject\u id,:scope=>:subject\u preference\u id
验证以下项的唯一性:优先级,:范围=>:主题\u首选项\u id
终止
唯一性验证器对未保存的数据不起作用? 我怎样才能解决它

解决方案: 父对象应该执行验证,而不是自己进行验证:

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
def验证\科学\主题\选择\唯一性
如果科学主题选择。地图(&:优先级)!=科学主题选择。地图(&:优先级)。uniq

错误[:base]验证不是这样工作的。它们本质上是动态的。如果需要数据库约束,则必须在迁移中指定它。例如,a:uniq=>true将确保一个值在您的模型中是唯一的。

感谢您的重播,但是我如何约束使用范围重新分级的属性?范围已经是约束属性的一种方式。就像一个获得注册用户的作用域一样,它总是会将注册用户带回来。