Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 3 ActiveRecord嵌套关联选择查询_Ruby On Rails_Ruby_Ruby On Rails 3_Activerecord - Fatal编程技术网

Ruby on rails Rails 3 ActiveRecord嵌套关联选择查询

Ruby on rails Rails 3 ActiveRecord嵌套关联选择查询,ruby-on-rails,ruby,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby,Ruby On Rails 3,Activerecord,我正在尝试为我制作的测验管理员制作一个API 我有一个测验模型,有很多问题和结果 问题模型也有很多答案 我希望url/data/quick/7返回id=7的测验的所有问题+答案和结果 这是我目前的方法 def quiz @quiz = Quiz.find(params[:id]) @questions = @quiz.questions.select('id, content') # returns only selected fields @results = @qu

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

我有一个测验模型,有很多问题和结果 问题模型也有很多答案

我希望url
/data/quick/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

无论我尝试什么,它似乎忽略了answers循环的select语句,并且总是返回full对象

--

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

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

返回的正是我想要的。所以这与我将其放入数组/散列的方式有关,我猜,但仍然无法计算出来

我认为如果你尝试这样的方法,它会奏效:

@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>)
选择id、内容、点
根据答案
问题id在()

这是可行的,但不幸的是,这不是我真正想要的方式。这会将所有答案一起转储,因为我希望每组答案与相应的问题嵌套在一起。谢谢你的回答。