使用React

时间:2019-06-04 21:40:14

标签: javascript ruby-on-rails ruby reactjs

在设置了一个简单的与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

那么,有人对此有任何暗示吗?

1 个答案:

答案 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 }