ruby-on-rails - 在ruby on rails中,当记录有多个标签时如何按标签对记录进行分组

标签 ruby-on-rails group-by acts-as-taggable-on

我正在使用 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/

相关文章:

ruby-on-rails - 如何在 rails3 中嵌入用户创建的 ruby​​ 程序

ruby-on-rails-3 - 如何使用 acts-as-taggable-on 按上下文搜索

ruby-on-rails - Ruby on Rails : Acts as taggable on gem, 在模型中使用上下文

ruby-on-rails - 在 Rails 4 中,如何在创建之前操作强参数?

ruby-on-rails - 如何在一行中使用 if 语句在 Ruby 中设置变量?

ruby-on-rails - “拆分”ActiveRecord 集合

MySQL - 在某些行上选择 AVG,在所有行上选择 SUM

mysql - 如何通过zerofill进行mysql分组?

python - 使用 groupby 键作为 pandas dataframe 的索引

ruby-on-rails - 如何对所有 Controller 使用around_action,但具有某些操作的特定 Controller 除外