You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rails Ajax Datatable中将JSON响应中的ID数组传递至视图DOM

最简单的两种实现方案

根据你的需求,分两种场景给你最直接的解决方案:

场景1:需要所有用户记录的ID数组(不受Datatable筛选/分页影响)

这是最省事的方法,直接在后端视图渲染时生成,完全不需要AJAX:

在你的index.html.erb中添加:

<div id="people"><%= User.pluck(:id).join(',') %></div>

pluck(:id)会直接从数据库取出所有用户的ID,join(',')把数组转成逗号分隔的字符串,直接渲染到DOM里即可。

场景2:需要Datatable当前返回数据集的ID数组(受筛选/分页/排序影响)

你的前端AJAX报错是因为没正确处理Rails Ajax Datatable返回的JSON结构——这个gem返回的是符合Datatable规范的JSON,根对象里并没有name属性,实际的记录数组嵌套在data字段下。修正后的代码如下:

$(document).ready(function () {
  $.ajax({
    type: "GET",
    url: "<%= peoples_path(format: :json) %>",
    dataType: "json",
    success: function(response) {
      // 从Datatable响应中提取所有记录的ID,拼接成字符串
      const recordIds = response.data.map(record => record.id).join(',');
      $('#people').html(recordIds);
    },
    error: function(xhr, status, error) {
      console.error('加载数据出错:', error);
    }
  });
});

为什么你之前的代码报错?

Rails Ajax Datatable返回的JSON结构是这样的(简化版):

{
  "draw": 1,
  "recordsTotal": 4,
  "recordsFiltered": 4,
  "data": [{"id": "1", "name": "张三"}, {"id": "2", "name": "李四"}]
}

你之前直接访问data.name,但根对象里根本没有name属性,自然会出现undefined错误。你需要从response.data这个数组里遍历每个记录,提取它们的id字段。

内容的提问来源于stack exchange,提问作者Rene Chan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 15:08:15