如何合并Redis哈希和Rails记录?

时间:2016-02-27 10:59:55

标签: ruby-on-rails ruby redis

例如,我有一个购物车(redis哈希),其中包含产品ID和计数:

{"165"=>"2", "166"=>"3"}

如何找到所有带有这些ID的产品? 我想是这样的:

1)Product.where(id: hash.keys),但后来我失去了count

2)我可以迭代哈希:

@products = []

hash.each do |id, count|
  product = Product.find(id)
  @products << product
end

但我不知道如何在product记录中添加计数参数,我认为这种方法效率低,因为我会得到O(N)查询。

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您可以获得包含两个元素的数组数组,其中第一个是产品,第二个是 count

Product.find(hash.keys).index_by(&:id).values_at(*hash.keys).zip(hash.values)

如果您希望它是哈希值,您还可以在末尾添加.to_h

我真的不推荐这个,但是如果你绝对希望将 count 添加到Product s本身,你可以使用上面的结果和本征类:

result.map do |product, count|
  product.define_singlethon_method(:count) { count }
  product
end