Ruby on rails 添加不在id/外键上的引用完整性

Ruby on rails 添加不在id/外键上的引用完整性,ruby-on-rails,Ruby On Rails,在Rails 6应用程序中,我的课程模型有3个属性:讲师id,年份,和标签 如果没有已定义的课程与同一讲师id的年值相同,那么有没有办法使带有标签的课程无效? 例如,使用以下课程表 |instructor_id|year|tag| |1 |2019| | 下面的陈述都是正确的 Course.new(instructor_id: 1, tag: 2019).valid? #=> true Course.new(instructor_id: 1, tag: 2020

在Rails 6应用程序中,我的
课程
模型有3个属性:
讲师id
年份
,和
标签

如果没有已定义的
课程
与同一
讲师id
值相同,那么有没有办法使带有
标签的
课程
无效? 例如,使用以下
课程

|instructor_id|year|tag|
|1            |2019|   |
下面的陈述都是正确的

Course.new(instructor_id: 1, tag: 2019).valid? #=> true
Course.new(instructor_id: 1, tag: 2020).valid? #=> false
或者我应该为此编写一个自定义验证器

为了澄清,这里是我的自定义验证器

class Course < ApplicationRecord
      validates :tag,   referential_integrity: { reference: :year, scope: :instructor },
                        allow_nil: true
end


class ReferentialIntegrityValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    record.errors.add(attribute, :required) unless record.class.find_by(options[:scope] => record.send(options[:scope]),
                                                                        options[:reference] => value)
  end
end
课程record.send(options[:scope]),
选项[:参考]=>值)
结束
结束

我可以使用内置验证实现相同的验证吗?

也许您正在寻找这样或类似的验证,而不是标签

validates :instructor_id, uniqueness: { scope: [:tag] }

谢谢你的回复。我在这里的目标是确保不可能有一门
课程(针对
讲师
)的
标签与现有
年份不同。我不明白
的独特性如何能保证这一点。