在设置了一个简单的与Rails相关的帖子相关的用户模型后,我想获得带有响应的帖子所有者的头像,但是所有我得到此错误:
TypeError:无法读取未定义的属性'username'avatar'等。
我试图在获取帖子时让相关的帖子用户
async getPost() {
// this.setState({showProgress: true})
let {
match: { params }
} = this.props;
const response = await axios
.get(`/posts/${params.id}`, {
headers: {
Accept: "application/json",
"Content-Type": "application/json"
},
credentials: "same-origin"
})
.then(result => {
this.setState({
title: result.data.post.title,
user: result.data.post.user.username,
user: result.data.post.user,
url: result.data.post.user.avatar.post.url
});
})
.catch(error => {
console.error(error);
});
}
但是在日志上仍然显示错误,并且被帖子填充的用户是user_id
那么,有人对此有任何暗示吗?
答案 0 :(得分:3)
这是因为您返回的数据不包含用户信息。在ajax调用响应中,您无法像在rails控制器中那样进行查询。
在这种情况下,您应该在控制器操作中返回用户信息和帖子。
post = Post.find(params[:id])
user = post.user
post = post.as_json
post[:user] = user.as_json
render json: { post: post }
如果您需要多个帖子的用户信息,则可以在Rails控制器操作中使用紧急加载
@posts = Post.includes(:user).all.map do |post|
post_json = post.as_json
post_json[:user] = post.user.as_json
post_json
end
render json: { posts: @posts }