@IsaevAlex
Веб разработчик

Как связать модели Ruby on Rails на ReactJS?

Всем привет! В общем создаю проект на rails. Для клиентской части использую React JS. На странице users/show создаю посты, а модель Post имеет отношение belongs_to к User. Мне необходимо вывести имя автора поста (post.user.name) А React в компоненте Post не выводит это. Как в ReactJs это сделать, если про отношение моделей User и Post он ничего не знает?
  • Вопрос задан
  • 459 просмотров
Решения вопроса 1
@undefined_title
В реакт приложениях для хранения данных используется библиотека redux, сами запросы надо делать в действиях(action), для того чтобы бороться с асинхронностью и правильно делать запросы используй redux-thunk или redux-api-middleware, если в body ответа от сервера ты получаешь не те данные которые тебе надо, то это проблема именно на сервере. У тебя должен быть эндпоинт /api/user/:id где ты можешь получить юзера, и в обьекте юзера должен быть post_id c id поста, и ты бы мог получить его например на /api/post/:id, но если тебе надо сделать на скорую руку делай без редакса и в ComponentDidMout через fetch стягивай данные, в es6 будет что то такое
constructor(props) {
  super(props);
  this.state = {
    post: {
      user: {}
    }
  }
}
ComponentDidMount() {
  const { postID } = this.props;
  let data = fetch('localhost:3000/post/' + postID)
    .then((response) => { 
      this.setState({post: JSON.stringify(response.json)}, (prevState) => {
        fetch('localhost:3000/user/' + prevState.post.user_id)
        .then ((response) => {
          this.setState({ ...prevState, user:  JSON.stringify(response.json)});
        });
      });
    });
}
render () {
  return (
    <div>
      {this.state.post.user.name}
    </div>
  )
}

еще надо заметить что на сервере должно быть разрешение CORS Для этого клиента
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы