我试图弄清楚如何从我的反应前端访问以嵌套散列形式发送给我的 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(users) 测试它是否正常工作时,它现在正在呈现一个空数组。通过 SQL 在 LedgersService 中生成数据:
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", :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=>"存款", :transactable_id=>"28cba04f-5b9d-4c9c-afca-b09a6e0e8739"}]}
User 模型确实存在一个序列化程序,但它没有被生成。
通常数据有多个这些点,例如,一个调用应该有 3 个以上的可交易对象,这就是为什么我使用分类帐上的地图功能一次获取每个相关数据的原因。任何有关调整的建议将不胜感激!