我正在使用 Rails 3.0 和 acts_as_taggable_on gem。我有一个糖果模型,糖果可以有多个口味标签。假设
Candy1.tags #['apple', 'orange']
Candy2.tags #['orange', 'banana']
Candy3.tags #['apple', 'kiwi']
我想要一个标签列表,标签下方有相关糖果,如下所示:
苹果
- 糖果1
- 糖果3
橙色
- 糖果1
- 糖果2
...等等
我试过了
Candy.all.group_by{ |candy| candy.tags }
但这会将标签数组视为单个实体,返回如下内容:
['苹果', '橙子']
- 糖果1
['橙色', '香蕉']
- 糖果2
缺少 group_by_each 方法,最好的方法是什么? Another Stack Overflow question解释了如何使用简单的哈希在内存中执行此操作,但我想知道是否有更面向数据库的方法来使用 ActiveRecord 关联来执行此操作。
最佳答案
您可以遍历糖果并将它们存储在基于标签的散列中:
grouped = {}
Candy.all.each do |candy|
candy.tags.each do |tag|
grouped[tag] ||= []
grouped[tag] << candy
end
end
最后你会得到:
{'apple' => [candy1, candy2], 'orange' => [] ...}
希望对你有帮助
关于ruby-on-rails - 在ruby on rails中,当记录有多个标签时如何按标签对记录进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8526308/