撷取模型属性

问题描述:

我有型号:撷取模型属性

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实例。

任何想法?

感谢

+0

`include`将为每个`QuestionInExam`获取`Question`模型,然后调用`qe.question`来获取问题属性。仅在懒惰或贪婪的数据加载方面有所不同。在包含的情况下,您最多有2个查询到数据库。 – 2011-12-21 05:13:07

开始从问题的模型,像这样

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)