这听起来像你想在这里做的是使用多态关系。你将需要一个通用名称来进行考试/测验/分配,每个问题都属于其中的一个。说你叫他们的评估,你将建立你的模型是这样的:
class Question << ActiveRecord::Base
belongs_to :assessment, :polymorphic => true
end
class Exam << ActiveRecord::Base
has_many :questions, :as => :assessment
end
class Quiz << ActiveRecord::Base
has_many :questions, :as => :assessment
end
class Assignment << ActiveRecord::Base
has_many :questions, :as => :assessment
end
然后,你将需要两个字段添加到您的问题型号:
assessment_id
assessment_type
有了这层关系,你可以用它如:
@exam = Exam.create({:field1 => :val1})
@exam.questions.create({:field1 => :question1})
@exam.questions.create({:field1 => :question2})
它会基于问题模型中的附加字段准确知道哪些问题属于哪个模型。