Итак, последние пару часов я бился головой о стену, пытаясь получить это. Кроме того, я изменю название вопроса, когда узнаю название вещи ниже.
Первый вопрос, как это называется? #<Comment:0x007fda3aaeb7c8>
который возвращается из базы данных.
Во-вторых, я пытаюсь вернуть (рендерить json) комментарий, содержащий дочерние комментарии.
Что-то вроде этого:
[
{
id: 1,
title:'title',
body:'body'
},
{
"#< Comment:0x007fda3b3517f0>": {},
"#< Comment:0x007fda3b3517f0>": {},
}
]
Как вернуть значения этих комментариев? Когда я помещаю их в консоль, она показывает их атрибуты и значения, например:
puts comments[0][1]
{#<Comment id: 17, body: "Another Reply Test", created_at: "2016-08-20 04:05:16", updated_at: "2016-08-20 04:05:16", parent_id: 13, user_id: 54>=>{}, #<Comment id: 18, body: "Another Reply Test", created_at: "2016-08-20 04:05:16", updated_at: "2016-08-20 04:05:16", parent_id: 13, user_id: 54>=>{}}
но если я попытаюсь изменить их вообще - например, to_a или to_json - он просто взорвется (из-за отсутствия лучшего термина) вот так:
puts comments[0][1].to_a
#<Comment:0x007fda3b1911b8>
{}
#<Comment:0x007fda3b190fd8>
{}
Я использую Postgres, и я использую hash_tree closure_tree для сортировки комментариев.
Любые советы будут очень признательны, особенно с первым вопросом.
РЕДАКТИРОВАТЬ: индекс определения, который возвращает комментарии:
def index
if request.headers["type"] == 'music'
comments = Comment.where("song_id = ?", request.headers["id"]).hash_tree.to_a
comments.each do |comment|
puts comment[1] #shows all attributes and values
puts comment[1].to_a #blows up
puts comment[1].to_s #works
end
end
if comments
render json: {status:200, success:true, comments:comments}
else
render json: {status:404, success:false}
end
end