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