Ruby on rails 添加不在id/外键上的引用完整性
在Rails 6应用程序中,我的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
课程
模型有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] }
谢谢你的回复。我在这里的目标是确保不可能有一门课程(针对讲师)的标签与现有年份不同。我不明白的独特性如何能保证这一点。