Ruby on rails 在rails中添加两个对象

Ruby on rails 在rails中添加两个对象,ruby-on-rails,Ruby On Rails,我正试着做这样的事情 @qtn = [] @questions.each do |q| @mc = q.answers @qtn << q + @mc end 问题.rb 有很多答案吗 答案.rb 属于:问题 我希望像下面这样的输出将其作为json发送 @qtn = [ { id: "", question_details: "",

我正试着做这样的事情

    @qtn = []
    @questions.each do |q|
      @mc = q.answers
      @qtn << q + @mc
    end
问题.rb 有很多答案吗

答案.rb 属于:问题

我希望像下面这样的输出将其作为json发送

@qtn = [
            {
                id: "",
                question_details: "",
                created_at: "",
                updated_at: "",
                [
                    {
                        id: "",
                        answer_details: "",
                        create_at: "",
                        updated_at: ""
                    },
                    {
                        id: "",
                        answer_details: "",
                        create_at: "",
                        updated_at: ""
                    }
                ]
            }



        ]

我不确定这在rails中是否可能,但我认为类似的事情是可能的,希望您理解我在这里尝试做的事情。

如果您只想将其转换为JSON,请使用ActiveRecord中提供的方法

以你为例,既然我们想要所有的问题,我们真正需要做的就是:

Questions.all.to_json

您可以添加选项哈希以包括或排除某些字段或其嵌套属性。

首先从数据库中加载问题和答案:

@question = Question.eager_load(:answers).all
然后,将问题序列化为JSON时,可以传递includes选项:

@questions.to_json(include: :answers)
JSON输出示例:

[
  {
    "id": 1,
    "text": "How much wood could a woodchuck chuck?",
    "created_at": "2015-07-11T20:47:24.241Z",
    "updated_at": "2015-07-11T20:47:24.241Z",
    "answers": [
      {
        "id": 1,
        "text": "A lot",
        "question_id": 1,
        "created_at": "2015-07-11T20:47:41.096Z",
        "updated_at": "2015-07-11T20:47:41.096Z"
      }
    ]
  }
]
添加两个对象通常没有多大意义。将数字、字符串或数组等简单对象添加在一起是一回事,但添加两个苹果对象或一个苹果和一个梨的预期结果是什么

在ruby中,添加Apple.new+Apple.new不会得到苹果数组。[]+Apple.new也不起作用,因为它将试图强制苹果加入阵列

如果您必须在不使用Rails序列化的情况下执行上述操作,它将类似于:

@qtn = @questions.map do |q|
  q.to_hash.merge(answers: q.answers.map(&:to_hash))
end

你想要完成的是什么?与将ActiveRecord条目串联在一起相比,使用查询更容易表达这一点。另外,关系是如何定义的?更新了我的问题,希望它现在更有意义,所以你要问一个问题的所有答案吗?是的,每个问题都可以有多个答案,每个问题我想要这些答案,我想答案需要在这样一个键中-答案:[{id:1},{id:2}]?否则@qtn将不是一个有效的哈希数组。我有另一个对象q。答案需要附加到每个问题上!第一部分是我一直在寻找的答案。但是对于没有序列化的第二部分,我得到了这个错误未定义的方法“to_hash”,这是预期的,因为rails to hash函数被称为serializable_hash,这会使示例变得毫无意义。
@qtn = @questions.map do |q|
  q.to_hash.merge(answers: q.answers.map(&:to_hash))
end