我正在尝试在 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
我有 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
、
我想要的响应格式:
[
{
"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