【发布时间】:2011-12-16 10:44:52
【问题描述】:
我有模型:
class Exam < AR::Base
has_many :questions_in_exams
has_many :questions, :through => :questions_in_exams
end
class QuestionsInExam < AR::Base
belongs_to :examination
belongs_to :question
# This model also has a "question_index" attribute
end
class Question < AR::Base
has_many :questions_in_exams
has_many :examinations, :through => :questions_in_exams
end
给定一个考试实例,我想获取它的所有问题以及额外的问题 来自连接模型的属性(如“question_index”)。我怎样才能做到这一点?
如果我这样做:
e = Examination.find(1)
questions = e.questions
那么问题数组中的元素将没有“question_index”属性
我想我会写:
e = Examination.find(1)
questions = e.questions_in_exam(:include => "question")
但这似乎不太优雅,因为我需要的大部分数据都在 Question 模型上, 但返回的数组将包含 QuestionInExam 实例。
有什么想法吗?
谢谢
【问题讨论】:
-
include将为每个Question获取QuestionInExam模型,因此您然后调用qe.question以获取问题属性。区别仅在于数据的延迟或贪婪加载。在包含的情况下,您最多可以获得 2 个对数据库的查询。
标签: ruby-on-rails activerecord has-many-through