Я пытаюсь получить пользовательское приложение json в rails для извлечения вложенных пользовательских данных и их сообщений соответственно, но страница не отображает правильное содержание - PullRequest
0 голосов
/ 06 января 2019

У меня 3 модели пользователя, пост и комментарий. Пользователь может иметь несколько постов и комментариев. Мне нужно подготовить JSON только для последних 50 постов. Я не использую соглашение по рельсам, поэтому я должен написать это в neewsfeed_controller. Спасибо за поддержку.

класс NewsfeedsController

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' }

Форма сборки Я получаю данные. но я хочу пользовательский формат JSON от data.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"
      },
    ]
  }
]

Пожалуйста, руководство.

В настоящее время я не могу получить этот формат.

1 Ответ

0 голосов
/ 06 января 2019

Во-первых, вам нужно переопределить to_json в ваших моделях:

приложение / модели / 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

приложение / модели / user.rb

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

приложение / модели / 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...