Rails 3 ActiveRecord嵌套关联选择查询

时间:2012-07-22 05:10:12

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

我正在尝试为我制作的测验管理员制作API。

我有一个Quiz模型,它有很多问题和很多结果 问题模型还有has_many Answers

我希望网址/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

一切正常除了答案返回完整的答案对象,包括created-at,id,updated-at等等,我想要的就是我在查询中选择的字段。

为什么.select适用于@questions和@results但不适用于关联的@answers?

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

-

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

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

完全归还我所追求的。所以它与我将它放入阵列/哈希的方式有关,我猜测但仍然无法解决它。

1 个答案:

答案 0 :(得分: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>)