我正在尝试为我制作的测验管理员制作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')
完全归还我所追求的。所以它与我将它放入阵列/哈希的方式有关,我猜测但仍然无法解决它。
答案 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>)