2012-07-22 90 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