迭代rails活动记录模型?

时间:2014-07-10 11:11:05

标签: ruby-on-rails rails-activerecord

如何迭代每个product_category_id并返回属于product_category_id的modifier_id数组?

这是我的数据库布局:

id  product_category_id modifier_id time_stamp
1         7                     5               NULL
2         7                     4               NULL
3         7                     54              NULL
4         7                     55              NULL
5         8                      6              NULL
6        93                      7              NULL
7        48                      5              NULL
8        48                      4              NULL
9        48                     55              NULL
10       48                     54              NULL
11       11                      2              NULL
12       11                      1              NULL
13       11                      10             NULL
14       11                      44             NULL

https://gist.github.com/ggeorgiev1/aaed6de2643c16bef0a7

所以结果应该与此类似: {:product_category_id => 7,:modifier_id => [5,4,54,55]}

谢谢

3 个答案:

答案 0 :(得分:1)

如果您对

等格式没问题
{ 7: [5, 4, 54, 55] }

你可以这样做:

result = Hash.new {|k, v| k[v] = [] }

ProductCategoryDefaultModifiers.all.each do |it|
  result[it.product_category_id] << it.modifier_id
end

puts result

答案 1 :(得分:1)

您可以使用#group_by

执行此操作
ProductCategoryDefaultModifiers.all.group_by do |record| 
  {:product_category_id => record.product_category_id}
end

#=> {:product_category_id=>7} => [#<ProductCategoryDefaultModifier id: 1, modifier_id: 5>, ...]

请记住,对于大数据集来说,最好使用数据库group

答案 2 :(得分:0)

只需拥有产品类别= 7的修饰符数组

modifiers = ProductCategoryDefaultModifier.select(:modifier_id).where(product_category_id: 7).pluck(:modifier_id)

或者你可以将它们全部放在一个hash中,其中key是product_category_id

ProductCategoryDefaultModifier.all.group_by{|pcdm| pcdm.product_category_id}