【问题标题】:Rails 3 ActiveRecord nested associations select queryRails 3 ActiveRecord 嵌套关联选择查询
【发布时间】:2012-07-22 05:10:11
【问题描述】:

我正在尝试为我创建的测验管理员创建一个 API。

我有一个测验模型,它有_many 个问题和has_many 结果 Question 模型也有_many Answers

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

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

--

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

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

返回正是我所追求的。所以这与我将它放入数组/哈希的方式有关,我猜想但仍然无法解决。

【问题讨论】:

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


    【解决方案1】:

    我认为如果你尝试这样的事情会奏效:

    @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>)
    

    【讨论】:

    • 这行得通,但不幸的是,这不是我真正想要的方式。这会将所有答案一起转储到我希望每组答案与适当问题嵌套的地方。不过感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 2023-03-11
    • 2011-12-15
    • 2011-10-25
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多