【发布时间】:2020-12-16 17:42:40
【问题描述】:
我目前正在处理一个报告接收过多信息并导致后续加载超时或需要很长时间才能加载所有必要数据的问题。当前函数当前正在使用 find 方法,据我所知 find_by_batches 可能对此更好,但我不确定这是如何实现的,我当前的 find 正在对数组键进行操作。我的意图仍然是获取数据,但可能会对其进行批处理,以便更快地加载。下面是嵌套数组的 sn-p 和示例。该问题发生在嵌套的消费者哈希中,该哈希具有许多具有对应键/值的个人消费者记录。
module Reports
class GroupsController < ::ApplicationController
def consumers
@group = Group.find(consumer_params[:group_id])
end
private
def consumer_params
params.permit(:group_id)
end
end
end
Group : {
key1: value
key2: value
key3: value
key4: value
key5: value
},
consumers: {
{
key:value
key:value
key:value
},
{
key:value
key:value
key:value
}, etc...
}
}
【问题讨论】:
-
是什么让您相信
Group.find(consumer_params[:group_id])电话是您的根本问题?consumer_params[:group_id]是什么?为什么单个.find调用会成为您问题的根源? -
这是一个公平的观点,我假设找到是问题所在,因为它返回的数据集最多可以有 9000 条记录。因此,它会导致加载时间过长或超时。
-
再次,
consumer_params[:group_id]是什么?如果它是一个整数,那么.find应该返回一条记录。也许它不是整数?也许它是一个数组? -
它不返回整数。 Group_id 返回具有 5 个键和 1 个嵌套数组的组,其中包含所有消费者。我将添加一个示例。
-
看来您可能遇到了 N+1 问题,这将有助于了解您对 @group 所做的工作
标签: ruby-on-rails ruby sqlite activerecord find