2012-07-22 45 views
1

我正在尝试为我制作的测验管理员制作一个API。Rails 3 ActiveRecord嵌套关联选择查询

我有一个测验模型,该模型的has_many问题和的has_many结果 问题模型还的has_many答案

我想要的网址/data/quiz/7所有问题+回答和结果返回测验与ID = 7

这是我目前所拥有的方法。

def quiz 
    @quiz = Quiz.find(params[:id]) 

    @questions = @quiz.questions.select('id, content') # returns only selected fields 
    @results = @quiz.results.select('id, content, points_limit') # returns only selected fields 

    @questions.each do |question| 
     question['answers'] = question.answers.select('id, content, points') #returns whole object 
    end 

    @return = Hash.new 
    @return['questions'] = @questions 
    @return['results'] = @results 

    respond_to do |format| 
     format.json { render json: @return } 
     format.xml { render xml: @return } 
    end 
end 

一切正常,除了答案返回,包括创建,在,ID,更新,在等等等等,所有我想在查询中选择的领域,如我有充分的答案对象。

为什么.select为@questions和@results而不是相关的@answers?

无论我尝试什么,它似乎都忽略了答案循环的select语句并始终返回完整的对象。

-

在控制台...我知道做同样的事情

question.answers.select('id, content, points') 

回报正是我之后。所以这是我把它放入Array/Hash的方式,我猜测,但仍然无法解决。

回答

2

我想,如果你尝试这样它会工作:

@answers = Answer.select([:id, :content, :points]) 
       .where(question_id: @questions.pluck(:id)) 

这是一样的:

SELECT id, content, points 
FROM answers 
WHERE question_id in (<question_ids array>) 
+0

这一工程,但没有办法,我真的希望它很遗憾。这将所有答案都放在一起,因为我希望每个答案都嵌套在适当的问题中。尽管感谢您的回答。 – markstewie 2012-07-22 19:20:04