Доступ к данным из службы rails в интерфейсе реагирования

Совершенно новый для приложений React on Rails, особенно для части React. Я пытаюсь получить доступ к данным во вложенном хэше, полученном из SQL-запроса в службе Rails. Во-первых, это вообще возможно?

В Rails Console допустим, что user1 уже найден по id, LedgersService.transactions(user1).first возвращает все данные в этом формате:

{:transactable=>{:type=>"Deposit", :id=>"28cba04f-5b9d-4c9c-afca-b09a6e0e8739", :user_id=>"72700244-e6b0-4baf-a381-c22bfe56b022", :transacted_at=>"2019-03-12 19:04:48.715678", :amount_cents=>15, :notes=>"none", :processor=>nil, :details=>nil}, :ledgers=>[{:entry_type=>"credit", :amount_cents=>15, :transacted_at=>"2019-03-12 19:04:48.715678", :user_id=>"72700244-e6b0-4baf-a381-c22bfe56b022", :transactable_type=>"Deposit", :transactable_id=>"28cba04f-5b9d-4c9c-afca-b09a6e0e8739"}]}

Я пытаюсь сделать что-то подобное в своем компоненте React, чтобы попытаться получить данные, однако я не совсем уверен, как установить часть LedgersService.transactions. Вот как это у меня сейчас:

class LedgersIndex extends React.Component {
  constructor(props) {
    super(props);
    this.state = { ledgers_service: { transactions: [] }, paginator: { count: 0, page: 0, limit: 0 }, user: { id: this.props.match.params.user_id } };

Мой вызов конечной точки:

componentDidMount() {
    var user_id = this.state.user.id;
    this.fetchData(user_id, 1);
  }

  fetchData = (user_id, page_number) => {
    apiService.ledgersIndex(user_id, page_number)
      .then(
        paginated => {
          this.setState({
            ledgers_service: { 
              transactions: paginated.ledgers_service.transactions
            },
            paginator: {
              limit: paginated.meta.limit,
              count: paginated.meta.count,
              page: paginated.meta.page -1
            }
          });
        },

Далее в моем рендере:

render() {
    const { classes } = this.props;
    const { ledgers_service, paginator } = this.state;

Моя выборка в apiService:

function locationsIndex(page_number) {
  const requestOptions = {
    method: 'GET',
    headers: Object.assign({},
      authorizationHeader(),
      {  'Content-Type': 'application/json' })
  };

  return fetch(`${process.env.API_SERVER}/api/v1/admin/locations?page=${page_number}`, requestOptions)
    .then(handleResponse)
    .then(paginated => {
      return paginated;
    });
}

Когда я console.info(ledgers_service.transactions(this.state.user.id)), я получаю сообщение об ошибке, что Ledgers_Service.transactions не является функцией. Однако console.info(paginator.count) работал, это потому, что транзакции устанавливаются в массив?

Как правильно получить ту же конечную точку в моем компоненте React, что и в моей консоли rails?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
21
1

Ответы 1

Quite new to React on Rails apps, especially the React portion. I'm trying to access data in a nested hash that is given from a SQL query in a Rails service.

Да, JS любит JSON, поэтому у вас должно быть действие Rails, которое отвечает JSON. Это правильный способ обмена данными между React и Rails:

# in your React app
fetch('/path/to/resource.json')
.then((returnedResource) => {
      // do something with JSON
 })
.catch(error => console.error('Error:', error));

# in your controller
respond_to do |format|
     format.json { render json: LedgersService.transactions(user1).first }
end

Оттуда вы можете рассматривать свой returnedResource как объект JSON. В вашем случае это будет pagination

Вот как в настоящее время работает контроллер в моем классе User: ** def transaction t = LedgersService.transactions(@user) json_response(t) end ** Будет ли первый в конце по-прежнему отображать все ответы 1 на 1?

Sachin 21.03.2019 17:19

Я обновил свою выборку в своем исходном вопросе внизу. И главное, что я хочу вернуть, это не данные из LedgersService, как именно они доступны в React? Я попробовал то, что включено выше, установив Ledgers_Service: [], в this.state, затем я также попробовал только транзакции: [] в состоянии, все возвращаются пустыми

Sachin 21.03.2019 17:22

Я не понимаю ваш последний вопрос. Не пытайтесь вместить слишком много кода в эти комментарии, потому что их трудно читать. Отредактируйте свой пост, добавив более важные детали. Если вы хотите показать что-то один на один, есть сотни способов сделать это, и я не могу перечислить их все. Если вы можете получить свои данные из Rails в формате JSON, то этот поток мертв, и я успешно ответил на ваш первоначальный вопрос. Если вам нужна дополнительная помощь, переместите этот разговор в чат со мной или в такое место, как reddit.com/r/learnprogramming/новый. Я поищу твой пост.

Veridian Dynamics 21.03.2019 17:26

Другие вопросы по теме