Sinatra で ActiveRecord を使用しています。私はAR関係を持っていPost has_many Comments
ます。
すべての投稿とそのコメントを返す JSON で応答を作成する必要があります。次のようになります。
[
{
"id":1,
"title:"Title_1",
"comments":[
{ "content":"lorem ipsum", "post_id":1 },
{ "content":"foo bar", "post_id":1 },
]
},
{
"id":2,
"title:"Title_2",
"comments":[
{ "content":"lorem ipsum", "post_id":2 },
{ "content":"foo bar", "post_id":2 },
]
}
]
そのようなレスポンスを作成するのは一般的なタスクだと思うので、それを行うための良い方法があればいいのにと思います。
私の一時的な解決策 (以下のコード) は正しく動作しますが、長すぎて判読できません:
Post.all.map{|x| x.as_json(include: [:comments]).values[0] }.to_json
これは私が見つけた別の解決策です:
Post.all.as_json(include: [:comments]).to_json
悲しいことに、返される構造は異なって見えます。すべての投稿が追加の node にラップされます"post: {}"
。避けたいです。
[
{
"post":{
"id":1,
"title:"Title_1",
"comments":[
{ "content":"lorem ipsum", "post_id":1 },
{ "content":"foo bar", "post_id":1 },
]
}
},
{
"post":{
"id":1,
"title:"Title_2",
"comments":[
{ "content":"lorem ipsum", "post_id":2 },
{ "content":"foo bar", "post_id":2 },
]
}
}
]