例如,我有一个购物车(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)查询。
如何解决这个问题?
答案 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