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