gpt4 book ai didi

ruby-on-rails - 如何查找未通过新验证的旧记录?

转载 作者:行者123 更新时间:2023-12-04 23:24:53 25 4
gpt4 key购买 nike

我最近在 Rails 应用程序中发现了一个与连接表中重复条目相关的问题。该应用程序具有教育意义,包括学生模型和练习模型。连接表跟踪哪些练习已分配给哪些学生。将练习多次分配给学生是没有意义的(即不允许在连接表中出现重复的条目)。

我通过向连接表添加唯一性验证部分解决了这个问题(请参阅下面的最后一行代码)。此验证将防止将来创建任何新的重复条目。但是,我仍然面临解决表中现有重复项的问题。

有没有办法对整个现有数据库运行新验证,以检索所有不再有效的记录?

class Student < ActiveRecord::Base
has_many :student_exercise_assignments
has_many :exercises, :through => :student_exercise_assignments
end

class Exercise < ActiveRecord::Base
has_many :student_exercise_assignments
has_many :students, :through => :student_exercise_assignments
end

class StudentExerciseAssignment < ActiveRecord::Base
belongs_to :student
belongs_to :exercise
validates :exercise_id, :uniqueness => { :scope => :student_id, :message => "An exercise can only be assigned to a student once" }

更新

下面盐山的回答正是我正在寻找的信息。不过,作为一个 Rails 新手,我对他使用 & 有点困惑。在 &:invalid? .如果有人需要 & 的入门书Ruby 中的运算符,有一个很好的 here .

最佳答案

怎么样只是:

invalid_assignments = StudentExerciseAssignment.select(&:invalid?)

这将选择所有在使用 invalid? 调用时返回 true 的赋值。方法。然后,您可以做任何需要做的事情来修复它们。

作为旁注,我还建议向您的数据库添加唯一性约束。请参阅此答案以了解原因: Rails: Validation in model vs migration

关于ruby-on-rails - 如何查找未通过新验证的旧记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14547515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com