Звучит так, как будто вы хотите здесь использовать полиморфные отношения. Вам нужно общее имя для экзамена / викторины / задания, и каждый вопрос будет принадлежать одному из них. Скажем, вы называете их оценками, вы бы настроили свои модели так:
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})
и он будет точно знать, какие вопросы принадлежат к какой модели, на основе дополнительных полей в вашей модели вопросов.