【问题标题】:Rails JBuilder recursive lookupRails JBuilder 递归查找
【发布时间】:2015-03-17 11:40:42
【问题描述】:

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

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:

{
  "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 参数传递给辅助函数。

【问题讨论】:

    标签: ruby-on-rails jbuilder


    【解决方案1】:

    渲染树的标准方法是使用递归部分。要实现这一点,您首先需要像这样向 Answer 模型添加一个方法。

    def next_question
      Question.find(next_question_id) if next_question_id  
    end
    

    提示:或者,您可以在 Answer 模型上设置 belongs_to :next_question, class_name: Question 关联)

    然后你创建一个像 _question.json.jbuilder 这样的部分:

    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 变量中。

    最后一件事:在你看来,你写的是

    json.partial! :question, question: @first_question
    

    【讨论】:

    • 我认为我们正朝着正确的方向前进。我认为在部分 jbuilder 文件的第二行中,您需要 json.answers question.answers do |answer|
    • 我认为我们应该将json.partial! :question, ... 更改为json.partial! 'question, ...。在我将此答案标记为已接受之前,您能否确认一下?谢谢阿尔马龙!
    • 是的,我错过了收藏,解决了这个问题。您可以使用符号或字符串作为部分名称,只要该部分位于安全目录中作为初始视图即可。
    • 就我而言,当我对部分使用符号时,它不起作用。它表示该符号不是兼容的 ActiveRecord 对象。
    猜你喜欢
    • 2023-04-09
    • 2011-04-24
    • 1970-01-01
    • 2012-07-17
    • 2015-12-16
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多