撷取模型属性
问题描述:
我有型号:撷取模型属性
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实例。
任何想法?
感谢
答
开始从问题的模型,像这样
Question.select("questions.*, examination.id")
.joins(:questions_in_exam => :examination)
.where("examinations.id=?", 1)
# Note that inside "select" you can specified all the attributes you want from any of the joined models.
一旦你高兴与您的查询其转换为scope
,并最终调用可能是这个样子:Question.for_exam(1)
`include`将为每个`QuestionInExam`获取`Question`模型,然后调用`qe.question`来获取问题属性。仅在懒惰或贪婪的数据加载方面有所不同。在包含的情况下,您最多有2个查询到数据库。 – 2011-12-21 05:13:07