【问题标题】:Rails parse JSON response for jQuery DatatablesRails 为 jQuery 数据表解析 JSON 响应
【发布时间】:2020-03-29 09:29:36
【问题描述】:

我对 jQuery DataTables 的 ajax 函数和 JSON 响应有一个小问题,我进入了我的 Rails 6 应用程序。我成功访问了路由并返回了 JSON 响应。

我想要实现的目标:我每天统计具有特定属性的记录数,所以我得到一个整数值。我的问题是:如何将此值传递给 jQuery DataTables 以显示在列中?

我的控制器操作:

 def showDailyOrders
    render json: 
    { count1: OrderCard.where(day: Date.today).where(dish_type: 0).count }
  end 

我的 jQuery 代码初始化 DataTable 和 AJAX 请求:

$("#todaysOrdersTable").DataTable({
            ajax: '/showDailyOrders',
            dataSrc: '',
            columns: [
                { title: 'Vollkost', data: 'count1' }
            ]
        });

我得到的 JSON 响应如下所示:

"{\"count1\":1}"

如何将值(在本例中为 1)传递给 jQuery 函数?它只是告诉我“正在加载”,但没有任何反应。如果我使用像 OrderCard.all 这样的另一个查询作为响应并使用键(例如“id”)作为函数中的数据,它会显示值。

感谢您的帮助!

【问题讨论】:

  • 最简单的方法是使用这个 gem:Ajax-DataTables-Rails gem,这里是:github.com/jbox-web/ajax-datatables-rails,它将帮助您划分所有数据表。通常,您将为表创建一个数据表类并将 view.context 提供给它,例如: format.json { render json: DailyOrderDatatable.new(params) }
  • 是的,我知道有一颗宝石,但我宁愿使用“普通”库。我只需要知道我如何获得价值。
  • 然后关注这个 railscast。在没有宝石的情况下详细解释所有内容:railscasts.com/episodes/340-datatables 基本上,您将创建一个类来处理返回格式正确的 json 响应,它实际上只是一个遵循表上列结构的数组。
  • 这就是为什么我问如何得到这个格式正确的 JSON 响应:)

标签: jquery ruby-on-rails json ruby datatables


【解决方案1】:

dataSrc 选项不存在,因此将被否定。而是使用ajax.dataSrc 选项:

$("#todaysOrdersTable").DataTable({
  ajax: {
    url: '/showDailyOrders',
    dataSrc: ''
  },
  columns: [
    { title: 'Vollkost', data: 'count1' }
  ]
});

修复dataSrc 选项后,您仍然会遇到返回值是单个值而不是数组的问题。当您返回 OrderCard.all 时,您会返回一个值数组,这就是它起作用的原因。

这意味着我们必须将返回的单个对象{"count1":1} 转换为包含对象[{"count1":1}] 的数组。这可以在客户端或服务器端完成。在客户端,它应该如下所示:

$("#todaysOrdersTable").DataTable({
  ajax: {
    url: '/showDailyOrders',
    dataSrc: obj => [obj], // transform into an array
  },
  columns: [
    { title: 'Vollkost', data: 'count1' }
  ]
});

或者,如果您更愿意更改服务器端,它应该看起来像这样:

order_cards = OrderCard.where(day: Date.today).where(dish_type: 0)
# note that the object is now wrapped inside an array
render json: [{ count1: order_cards.count }]

【讨论】:

  • 谢谢,我没有意识到我可以通过服务器端转换和正确的 dataSrc 方法强制渲染为 JSON 作为数组!你拯救了我的一天:D
猜你喜欢
  • 2020-09-06
  • 1970-01-01
  • 1970-01-01
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多