【发布时间】:2018-04-28 20:06:29
【问题描述】:
我正在尝试将哈希转换为 activerecord 关系,但我无法这样做。我打算使用 activerecord 关系对 Category 表进行排序然后过滤。最终目标是创建一个实例方法来过滤前 5 个访问过的类别,然后我可以在控制器中使用/调用它。这就是我的想法:
类别模型:
def top_5_visited
Article.joins(:categories).group('categories.name').sum(:impressions_count)
// Add sort
// Limit to top 5
end
类别控制器:
@categories = Category.top_5 visited
hash{"Simula"=>7, "Haskell"=>5, "JavaScript"=>10, "C#"=>112} 将通过以下查询创建:
total_count = Article.joins(:categories).group('categories.name').sum(:impressions_count)
我也尝试使用 sort_by 方法将其转换为数组:
total_count_sorted = total_count.sort_by {|_key, value| value}
我搜索了“将数组转换为 activerecord 关系”并引用了this 帖子,但对此进行了测试:
Category.where(id: total_count_sort.map(&:id))
在 Rails 控制台中,出现此错误:
NoMethodError: ["Simula", 7]:Array 的未定义方法 id
【问题讨论】:
-
想要的结果是什么?我猜你想要一个包含 5 个类别的 ActiveRecord::Relation,但你应该澄清这一点,因为这个问题很模糊。
-
而您实际上想要的是根据子查询之类的东西对数据库中的记录进行排序。你不需要先把总和拿出来。您使用的是什么 RDBMS?
-
嗨,最大,正确我想要一个 ActiveRecord::Relation 包含前 5 个访问量最大的类别。我正在使用 Postgresql。
标签: ruby-on-rails ruby activerecord