【问题标题】:Get rails associated objects with React使用 React 获取 rails 关联的对象
【发布时间】:2019-06-04 21:40:14
【问题描述】:

在使用 rails 设置一个简单的帖子关联用户模型后,我想获得带有反应的帖子所有者头像,但我得到了这个错误:

TypeError: Cannot read property 'username''avatar' etc.. of undefined

我试图让相关的帖子用户获取帖子

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

那么,有人对此有什么暗示吗?

【问题讨论】:

  • 能否把console.log(result)的结果显示出来,方便调试。

标签: javascript ruby-on-rails ruby reactjs


【解决方案1】:

这是因为您返回的数据不包含用户信息。在您的 ajax 调用响应中,您无法像在 rails 控制器中一样进行查询。

在您的情况下,您应该在控制器操作中将用户信息与 post 一起返回。

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 }

【讨论】:

  • quyetdc 就是这样,非常感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多