Rails 带参数的活动记录调用?
Rails active record call with parameters?
我的应用程序使用 Searchkick 和 Elasticsearch 来 return 从你的搜索中聚合(如类别细分等),我用它来构建过滤器。
现在我可以快速得到一个像这样的数组:
[[1, 47], [1, 119], [1, 174], [1, 207], [1, 217], [1, 225], [1, 239], [1, 241], [1, 271], [1, 293], [1, 295]]
第一个数字是计数,第二个是记录的id
。
我想做这样的事情:
"SELECT CONCAT(name, ' (', , ')') AS label, id FROM projects WHERE id = "
所以我最终得到了一个新数组,例如:
[["Project A (1)", 47], ["Project B (1)", 119], ... ]
然后我可以在 select 中直接使用它。我不想/不能通过第二组查询来重新创建这些计数。
我可以遍历数组并进行单独的原始 SQL 调用,但这看起来很乱。我认为这是某种混乱的 .map
调用,但我无法理解。
我可以获得两个单独的数组(id 和 count),然后快速从 BD 中获取名称数组:
['Project A', 'Project B', ...]
一旦我有了它,有没有一种快速的方法可以将三个数组合并为我需要的选项格式?
是的,正如您已经建议的那样,有一个使用 map
的简单解决方案。
假设您已经将来自 ElasticSearch 的 ID 和计数存储在以下数组中:
count_and_id = [[1, 47], [1, 119], [1, 174], [1, 207], [1, 217], [1, 225], [1, 239], [1, 241], [1, 271], [1, 293], [1, 295]]
然后,正如您所描述的,您 pluck
项目名称并将它们放入 Hash
以便更快地查找:
relevant_ids = count_and_id.map(&:second)
project_names = Project.where(id: relevant_ids).pluck(:id, :name).to_h # {47 => "Project A", 119 => "Project B", ...}
为了最终格式化数组,可以使用map
,建议:
result = count_and_id.map do |count,id|
description = "#{project_names[id]} (#{count})"
[description, id]
end # [["Project A (1)", 47], ["Project B (1)", 119], ...]
我的应用程序使用 Searchkick 和 Elasticsearch 来 return 从你的搜索中聚合(如类别细分等),我用它来构建过滤器。
现在我可以快速得到一个像这样的数组:
[[1, 47], [1, 119], [1, 174], [1, 207], [1, 217], [1, 225], [1, 239], [1, 241], [1, 271], [1, 293], [1, 295]]
第一个数字是计数,第二个是记录的id
。
我想做这样的事情:
"SELECT CONCAT(name, ' (', , ')') AS label, id FROM projects WHERE id = "
所以我最终得到了一个新数组,例如:
[["Project A (1)", 47], ["Project B (1)", 119], ... ]
然后我可以在 select 中直接使用它。我不想/不能通过第二组查询来重新创建这些计数。
我可以遍历数组并进行单独的原始 SQL 调用,但这看起来很乱。我认为这是某种混乱的 .map
调用,但我无法理解。
我可以获得两个单独的数组(id 和 count),然后快速从 BD 中获取名称数组:
['Project A', 'Project B', ...]
一旦我有了它,有没有一种快速的方法可以将三个数组合并为我需要的选项格式?
是的,正如您已经建议的那样,有一个使用 map
的简单解决方案。
假设您已经将来自 ElasticSearch 的 ID 和计数存储在以下数组中:
count_and_id = [[1, 47], [1, 119], [1, 174], [1, 207], [1, 217], [1, 225], [1, 239], [1, 241], [1, 271], [1, 293], [1, 295]]
然后,正如您所描述的,您 pluck
项目名称并将它们放入 Hash
以便更快地查找:
relevant_ids = count_and_id.map(&:second)
project_names = Project.where(id: relevant_ids).pluck(:id, :name).to_h # {47 => "Project A", 119 => "Project B", ...}
为了最终格式化数组,可以使用map
,建议:
result = count_and_id.map do |count,id|
description = "#{project_names[id]} (#{count})"
[description, id]
end # [["Project A (1)", 47], ["Project B (1)", 119], ...]