与Rails + React的表关系

时间:2018-11-19 04:04:17

标签: reactjs ruby-on-rails-5

“我的用户”表(有很多:tweets)具有以下列:
iduser_nameemailpasswordcreated_atupdate_at

和我的Tweets表(属于:user)具有以下列:
iduser_idtweetcreate_atupdate_at

现在我正在制作一个看起来像这样的React项目:

import React from 'react'

class Tweet extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      tweet: this.props.tweet
    };
  }
  render() {
    const tweet = this.state.tweet;
    return (
      <div>
        <p>{tweet.user_id} {tweet.created_at}</p>
        <p>{tweet.tweet}</p>
      </div>
    );
  }
}

export default Tweet; 

是否可以编写代码,以便通过user_name获得user_id?我已经尝试过{tweet.user_id.user_name},但是它不起作用,或者我必须在Tweets表中有一个user_name列,这样{tweet.user_name}是我最好的答案吗?

2 个答案:

答案 0 :(得分:1)

我不建议向该表中添加另一个user_name列,因为它的数据库设计不佳,因为您已经具有user_id并可以基于该id查找用户信息。

选项1: 我不知道您的父组件看起来像调用您的Tweet组件,但是如果它可以访问user_name,那么我会通过<Tweet tweet={someTweet} username={someUser}>将其与Tweet数据一起传递。

选项2: 拉取Tweet数据后,执行另一个请求,以根据该tweet的用户ID获取所有Tweet的user_name。将此用户名添加到React中Tweet对象的形状中,然后您的Tweet组件将可以通过tweet.user_name访问user_name,而无需更改Tweet表。

答案 1 :(得分:0)

我能够通过将用户信息包含在我的API中来解决此问题,如下所示:

def index
  tweets = Tweet.all.where(user_id: current_user.id)
  respond_to do |format|
    format.html
    format.json { render json: tweets.to_json(:include => :user) }
  end
end

这样,我可以使用{tweet.user.user_name}在React组件中获取用户名。