我正在尝试在 rails 应用程序中获取自定义 json 以分别获取嵌套的用户数据及其 post 但页面未显示正确的内容

I am trying to get a custom json in rails app to fetch nested user data and their post respectivelly but page is not displaying right content

我有 3 个模型用户,post 和评论。 用户可以有多个 post 和评论。 我只需要为最后 50 个 post 生成 JSON。 我没有使用 rails 约定,所以我必须将其写在 neewsfeed_controller 中。 感谢支持

class NewsfeedsController < ApplicationController respond_to :json

def build
    @posts = Post.all.order("created_at DESC")
    render json: {:event => @posts}
end


def data
    @posts = Post.all.order("created_at DESC")
    render :partial => "newsfeeds/data.json"
end

private

def post_params
    params.require(:post).permit(:content)
end

def find_post
    @post = Post.find(params[:id])

end

结束

在视图中:data.json.erb

 <%= res = {
  :posts => @posts.map do |post|

  end
} %>

<% res.to_json.html_safe %>

路线:

get 'build' => 'newsfeeds#build'
get 'data' => 'newsfeeds#data', :defaults => { :format => 'json' }

表单构建我正在获取数据。 但我想要 data.json

的自定义 json 格式

我想要的响应格式:

[
  {
    "type": "Post",
    "content": "First post",
    "user": {
      "type": "User",
      "name": "Luke"
    },
    "comments": [
      {
        "type": "Comment",
        "user": {
          "type": "User",
          "name": "Leia"
        },
        "content": "First comment"
      },
      {
        "type": "Comment",
        "user": {
          "type": "User",
          "name": "Han"
        },
        "content": "Second comment"
      },
    ]
  },
  {
    "type": "Post",
    "content": "Second post",
    "user": {
      "type": "User",
      "name": "Darth Vader"
    },
    "comments": [
      {
        "type": "Comment",
        "user": {
          "type": "User",
          "name": "Boba Fett"
        },
        "content": "Third comment"
      },
      {
        "type": "Comment",
        "user": {
          "type": "User",
          "name": "Jabba"
        },
        "content": "Fourth comment"
      },
    ]
  }
]

请指导。

目前,我无法获取该格式。

首先,您需要覆盖模型中的 to_json

app/models/post.rb

def to_json
  return {
    type: 'Post',
    content: self.content,
    user: self.user ? self.user.to_json : nil,
    comments: self.comments.map(&:to_json)
  }
end

app/models/user.rb

def to_json
  return {
    type: 'User',
    name: self.name
  }
end

app/models/comment.rb

def to_json
  return {
    type: 'Comment',
    content: self.content,
    user: self.user ? self.user.to_json : nil,
  }
end

然后在您的控制器中,执行如下操作:

def data
    @posts = Post.all.order("created_at DESC")
    render json: @posts.map(&:to_json), status: :ok
end