2

在 Rails 3.2 应用程序中,我有一个拥有许多奖项的用户模型。

Award 类具有 :type、:level 和 :image 属性。

在用户的展示页面上,我想展示他们的奖项,但有一些标准。User.awards 应该按类型和级别分组,对于每个类型级别的组合,我想显示它的图像,以及奖励的计数。

我正在努力构建查询和视图来实现这一点(并清楚地解释这一点)。

如何对子记录的两个属性进行分组,然后同时显示这些子记录的计数和属性(即图像)?

4

2 回答 2

1

由于活动记录对象、数组和分组数组的复杂组合,我花了一些时间才弄清楚这一点。

无论如何,如果这对其他人有用

给定一个 User 有很多 Awards,Award 有属性:type, :level, :image.

for award in @user.awards.group_by{ |award| [award.type,award.level] }.sort_by{|award| [award[0][0], award[0][1]]}
  puts "#{(award[0][0]).capitalize} - Level #{award[0][1]}"  # e.g. Award_Name - Level 1
  puts award[1].first.image #outputs the value of award.image, i.e. the image url 
  puts award[1].count  #counts the number of grouped awards
end

有点啰嗦!也许有办法优化这段代码?

于 2013-06-10T11:57:10.837 回答
0

根据您使用的数据库,您必须使用GROUP BYon 类型和级别构建自定义 SQL 查询:

SELECT * FROM users GROUP BY users.type, users.level

(Postgres 有一个特殊的解释,GROUP BY所以检查你正在使用的数据库的文档)。

要在 Rails 中编写它,请阅读文档: http: //guides.rubyonrails.org/active_record_querying.html#group

对于计数,您必须在第二步中执行此操作(Ruby 可以使用size查询将返回给您的 ActiveRecord 对象数组上的方法来执行此操作)。

于 2013-06-09T16:52:41.180 回答