按日期循环变量分组
我有一些运动成绩,我想循环,并在表格中的日期分组。 例如;
|Sat, 20| |Game 1 Results| |Game 2 Results| |Sun, 21| |Game 3 Results| |Sat, 27| |Game 4 Results|
我的控制器
@matches = Match.group([:matchId, 'DATE(matchDate)']).inject([]) do |results, matches| team_names = Match.where(matchId: matches.matchId) results << [matches.id, matches.matchDate, team_names.first.team.name, team_names.last.team.name, team_names.first.points, team_names.last.points] end
目前我正在做一个基本循环,正在显示。
|Sat, 20| |Game 1 Results| |Sat, 20| |Game 2 Results| |Sun, 21| |Game 3 Results| |Sat, 27| |Game 4 Results|
SQL GROUP BY
用于聚合值:您可以获取每个日期的匹配数或目标总和,依此类推。 ( 在这里阅读更多内容。 )但是如果你想要一组所有游戏的列表,那就不太合适了。
您将看到相同的日期两次,因为您按日期和匹配ID进行分组。
如果您没有大量数据,可以在Ruby代码中完成所有操作:
Match.all.group_by { |match| match.matchDate.to_date }
这将为您提供一个哈希,其中日期为键,匹配列表为值。
这个答案假设matchDate
是一个时间,因为你在你的例子中使用了DATE(matchDate)
。 如果它已经是日期,则不需要上面的.to_date
位。
另请注意,SQL中的DATE(a_time_column)
将提取数据库时区中的日期。 Rails通常将数据库配置为在内部使用UTC时区。 因此,如果您确实使用这样的数据库查询,请注意这一点并确保获得正确的日期。
问题是您要将matchId添加到group子句中。 另一种选择是查找所有不同的日期并迭代它们以显示您的表格。 我假设matchDate是一个Datetime,如果不是,它可能更干净。
distinct_dates = Match.pluck('DATE(matchDate)').uniq.compact distinct_dates.each do |date| date = DateTime.parse(date_string) roles = Role.where( :created_at => (date)..(date + 1.day) ) p date p roles.map(&:matchId) end
- rails – 按天和小时分组
- Rails中的ActiveModel :: Serializer – JSON结果中忽略的序列化方法
- 当我将我的应用程序推送到Heroku时,为什么我收到错误500“我们很抱歉,但出了点问题”?
- Backbone和Rails关联:避免JSON HashWithIndifferentAccess错误
- has_many通过表单和添加属性来连接表
- Rails形成三个模型和命名空间
- 如何通过Paperclip rails 4上传图像,文档文档和/或PDF文件
- Rails undefined方法`strftime’代表“2013-03-06”:String
- 为什么在控制台中不返回Active Record关系?