2016-02-27 45 views
0

例如,我有一個購物車(Redis的哈希值),其中包含產品ID和計數:如何合併Redis哈希和Rails記錄?

{"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記錄添加數PARAM,我認爲這種做法是低效的,因爲我會得到O(N )查詢。

如何解決這個問題?

回答

0

你可以得到一個數組的數組有兩個元素,其中第一個是產品和第二個是計數

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

您也可以在末尾添加.to_h,如果你想它是一個散列。


我真的不推薦,但如果你絕對想計數添加到Product s ^自己,你可以使用上面和eigenclasses的結果:

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

不'where(id:hash.keys)'保證返回記錄的順序與輸入中的id的順序相匹配? – spickermann

+0

@spickermann,好點,會解決這個問題。 – ndn

+0

我無法再獲取記錄屬性。未定義的方法ID爲#