【问题标题】:Adding a "uniq" check to an existing HABTM association向现有的 HABTM 关联添加“uniq”检查
【发布时间】:2016-06-22 00:09:10
【问题描述】:

我在学生和课堂之间有一个 HABTM 关联:

has_and_belongs_to_many :students, join_table: :classrooms_students

我已经为连接表创建了一个索引:

add_index "classrooms_students", ["classroom_id", "student_id"], unique: true

现在我想为此添加一个“uniq”检查,以便连接表中没有重复的记录,并且我可以在 rails 中捕获它。我可以直接将此检查添加到模型文件中,还是需要迁移才能执行此操作?

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    我认为您应该优先将其添加到您的迁移中,然后您也可以进行模型级别检查(如下所述)。

    在你的情况下,你会有类似的东西:

    class ClassroomsStudent
      validates :student_id, uniqueness: { scope: :classroom_id }
    end
    

    在您的迁移中,您可以:

    class AddUniqueIndexClassroomsStudent
      def change
        add_index :classrooms_students, [:classroom_id, :student_id], unique: true
      end
    end
    

    Add Index on ApiDoc

    Unique Index on Rails Guide

    【讨论】:

    • 我没有名为 ClassroomsStudent 的模型。我有一个名为 Classroom 的模型和另一个名为 Student 的模型。两者之间有一个 has_and_belongs_to_many 关联(以及一个名为教室学生的连接表)
    • 您可以手动添加ClassroomsStudent 模型,以便@oreoluwa 的答案可以工作。 class ClassroomsStudent < ActiveRecord::Base ...
    • 如果已经添加了索引,那么我猜你应该尝试链接2个相似的记录,看看它失败了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 2014-05-11
    • 1970-01-01
    相关资源
    最近更新 更多