Связи таблиц с Rails + React - PullRequest
       2

Связи таблиц с Rails + React

0 голосов
/ 19 ноября 2018

Таблица «Мои пользователи» (имеет множество: tweets) имеет следующие столбцы:
id, user_name, email, password, created_at, update_at.

и моя таблица твитов (принадлежит: user) имеет следующие столбцы:
id, user_id, tweet, create_at, update_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}, но он не работает, или мне нужно иметь столбец user_name в таблице твитов, чтобы {tweet.user_name} был бы моим лучшим ответом?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Я смог решить эту проблему, включив информацию о пользователях в мой 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

Таким образом, я могу получить имя пользователя в моем компоненте React с помощью {tweet.user.user_name}.

0 голосов
/ 19 ноября 2018

Я бы не рекомендовал добавлять в таблицу еще один столбец user_name, поскольку он имеет неверный дизайн базы данных, поскольку у вас уже есть user_id и вы можете просматривать информацию о пользователях на основе этого идентификатора.

Вариант № 1: Я не знаю, как выглядит ваш родительский компонент, вызывая ваш компонент Tweet, но если у него есть доступ к user_name, я бы передал его вместе с данными Tweet через <Tweet tweet={someTweet} username={someUser}>.

Вариант № 2: После того, как вы извлечете свои твиты, выполните другой запрос, чтобы получить имя пользователя всех твитов на основе идентификатора пользователя твита. Добавьте это имя пользователя к форме объекта Tweet в React, тогда ваш компонент Tweet будет иметь доступ к имени пользователя через tweet.user_name, и вам не нужно будет менять таблицу Tweet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...