Доступ к вложенным данным из Rails-интерфейса React - PullRequest
0 голосов
/ 19 марта 2019

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

Вот соответствующий код:

class LedgersIndex extends React.Component {
  constructor(props) {
    super(props);

    this.state = { paginator: { count: 0, page: 0, limit: 0 }, user: { id: this.props.match.params.user_id }, users: [] };

Здесь он называется:

fetchData = (user_id, page_number) => {
    apiService.ledgersIndex(user_id, page_number)
      .then(
        paginated => {
          this.setState({
            users: paginated.users,
            paginator: {

И, наконец, вот где я пытаюсь его отобразить:

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



     return ( ......        
               <TableBody>
                  {users.map(user => (
                    <TableRow key={user.id}>
                      {user.ledgers.map(ledger => (
                        <div>
                          <TableCell align='left' scope='row'>{ledger.entry_type}</TableCell>
                          <TableCell align='left' scope='row'>{ledger.transactable_id}</TableCell>
                          <TableCell align='left' scope='row'>{ledger.transactable_type}</TableCell>
                          <TableCell align='left' scope='row'>{ledger.transacted_at}</TableCell>
                          <TableCell align='left' scope='row'>{ledger.amount_cents}</TableCell>
                          <TableCell align='center' scope='row' className={classes.actionCol}>
                            <LedgersEdit user={user} handleSubmit={this.handleUpdate} user_id={this.state.user.id}/>
                          </TableCell>
                        </div>
                      ))}
                    </TableRow>
                  ))}
                </TableBody>

Когда я console.log (пользователи) проверяю, работает ли он, он рендерит пустой массив прямо сейчас,Данные генерируются в LedgersService с помощью SQL:

class LedgersService
  class << self

    def transactions(user, options = {})
      keyed_list = {}
      transactables_for(user, options).each do |t|
        t_key = "#{t['model']}__#{t['id']}"
        keyed_list[t_key] ||= {
          transactable: {
            type: t['model'],
            id: t['id'],
            user_id: t['user_id'],
            transacted_at: t['transacted_at'],
            amount_cents: t['amount_cents'],
            notes: t['notes'],
            processor: t['processor'],
            details: t['details'],
          },
          ledgers: []
        }
        keyed_list[t_key][:ledgers] << {
          entry_type: t['ledger_entry_type'],
          amount_cents: t['ledger_amount_cents'],
          transacted_at: t['ledger_transacted_at'],
          user_id: t['ledger_user_id'],
          transactable_type: t['transactable_type'],
          transactable_id: t['transactable_id'],
        }
      end
      keyed_list.map(&:second)
    end

Вот как данные мне возвращаются:

Не найден сериализатор для ресурса: {: 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 ",: процессор => nil,: details => nil},: бухгалтерские книги => [{: 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"}]}

Для модели User существует сериализатор, но он не генерируется.

Обычно данные имеют несколькоНапример, в этих точках один вызов должен содержать более 3 транзактных таблиц, поэтому я использую функцию карты в регистрах, чтобы получать все релевантные данные по одному.Будем благодарны за любые предложения по настройке!

...