提问人:David Hempy 提问时间:5/10/2023 更新时间:5/10/2023 访问量:22
Rails 模型与两个具有共同祖父母的模型相关......如何创建验证和工厂?
Rails model related to two models with a common grandparent...how to create a validation and factory?
问:
我有一个提交模型,belongs_to两个不同的模型:学生和测验。
学生和测验分别belong_to一门课程。
当学生发送测验提交时,假定该测验必须与学生所在的课程相同。我想为此写一个验证。
第一个问题:如何编写验证以确保两个相关记录(Student 和 Quiz)具有相同的共同父项?
第二个问题:我怎样才能创建一个提交工厂,当没有给出任何参数时,它将创建一个通过该验证的提交?
答:
0赞
David Hempy
5/10/2023
#1
对于模型验证,我使用了:
class Submission < ApplicationRecord
belongs_to :student
belongs_to :quiz
validate :same_course
def same_course
if quiz.course != student.course
errors.add(:quiz, "must be for the student's course")
end
end
end
这合理吗?有没有一种更像 Rails 的方式来表达这一点?
0赞
David Hempy
5/10/2023
#2
对于工厂来说,
FactoryBot.define do
factory :submission do
transient do
course { create :course }
end
student { create :student, course: course }
quiz { create :quiz, course: course }
end
end
这样,我就可以在不设置任何其他记录的情况下创建提交:
FactoryBot.create :submission
如果我手头已经有一门课程,我可以用它来代替:
FactoryBot.create :submission, course: my_course
当然,我也可以通过学生和/或测验......尽管随后呼叫者承担了共同课程的父母责任。
这有一个次优的副作用,即当你......但我可以忍受。build :submission
评论