首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails JBuilder递归查找

Rails JBuilder递归查找
EN

Stack Overflow用户
提问于 2015-03-17 11:40:42
回答 1查看 902关注 0票数 1

我使用的是Rails 4,我有一些简单的模型如下:

代码语言:javascript
复制
class Question < ActiveRecord::Base
  # columns (id, text)
  has_many :answers
end

class Answer < ActiveRecord::Base
  # columns (id, text, next_question_id)
  belongs_to :question
end

您可以看到,一个答案有一个next_question_id列,它将用于查找另一个问题。我想要生成这样的树结构json:

代码语言:javascript
复制
{
  "text": "This is question 1",
  "answers": [
    {
      "text": "This is answer a",
      "next_question": {
        "text": "This is question 2",
        "answers": [
          {
            "text": "This is answer c",
            "next_question":
          }
        ]
      }
    },
    {
      "text": "This is answer b",
      "next_question": {
        "text": "This is question 2",
        "answers": [
          {
            "text": "This is answer d",
            "next_question":
          }
        ]
      }
    }
  ]
}

如何使用JBuilder实现这一目标?我尝试了解决方案here,但不能将json参数传递给助手函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-17 12:03:47

绘制树的标准方法是使用递归的部分。要实现这一点,首先需要向Answer模型添加如下方法。

代码语言:javascript
复制
def next_question
  Question.find(next_question_id) if next_question_id  
end

(提示:您可以在Answer模型上设置一个belongs_to :next_question, class_name: Question关联。)

然后创建一个像_question.json.jbuilder这样的部分,如下所示:

代码语言:javascript
复制
json.(question,:id, :text)
json.answers question.answers do |answer|
  json.(answer, :id, :text)
  json.partial!(:question, question: answer.next_question) if answer.next_question
end

然后,在控制器中,您接受调查中的第一个问题,并将其放入@first_question变量。

最后一件事:在你看来

代码语言:javascript
复制
json.partial! :question, question: @first_question
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29098154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档