我有一个rails 4应用程序。我有以下代码:
@product_types = StoreProduct.where(:store_id => @store.id).pluck(:name)
@product_data = @products.map do |product|
product[ :data ].values.reverse!
end
@product_types输出如下所示:["Color", "QTY", "TypeOf"]
@product_data输出如下所示:[["RED", "17", "BOOK"]]
@products看起来像:[#<Product id: 141, store_id: 146, data: {"Color"=>"RED", "QTY"=>"17", "TypeOf" => "BOOK"}>]
我希望@product_data的排序顺序与@product_types相同。因此,如果它的QTY,Color,TypeOf为@product_types,则@product_data应按其密钥排序,方式与@product_types相同,因此@product_data应为:17,RED,BOOK。
答案 0 :(得分:2)
而不是:
@product_data = @products.map do |product|
product[:data].values.reverse!
end
尝试:
@product_data = @products.map do |product|
@product_types.map { |pt| product[:data][pt] }
end
#=> [["RED", "17", "BOOK"]]
答案 1 :(得分:1)
这可能会有所帮助。我直接处理一般的Ruby构造,模仿你的@products
:
foo = ["Color", "QTY", "TypeOf"]
bar = [{'QTY' => 17, 'TypeOf' => 'Book', 'Color' => 'Red'},
{'Color' => 'Blue', 'QTY' => 18, 'TypeOf' => 'Gem'}]
p foo.map{ |x| bar.map { |y| y[x] } }.transpose
#=> [["Red", 17, "Book"], ["Blue", 18, "Gem"]]