活动记录对同一用户在过去一小时内创建的帖子进行分组



我有一个故事模型。故事由用户创建,这些故事进入源。如果用户在一小时内创建了多个故事,我只想显示一个故事,所以我的问题是我如何编写 ActiveRecord 查询以按created_at小时分组,并user_id

所以事实证明这很容易。

Story.find_each.group_by do |story|
[story.user_id, story.created_at.beginning_of_hour]
end

然后,您可以映射结果并执行任何操作。我检查了一个组中是否有多个对象,如果有,则创建一个新故事,插入我要分组的所有故事的信息,然后将其添加到故事数组中。我从不保存新故事,所以我最终不会保存一堆奇怪的故事。

如果有人有更好的方法,我愿意接受建议。

这是整个方法:

def self.smart_feed
feed = []
self.find_each(batch_size: 10).group_by do |story|
[story.user_id, story.created_at.beginning_of_hour]
end.map do |stories|
if stories.second.count > 1
temp_story = self.new()
stories.second.map do |story|
if story.ratings.any?
temp_story.ratings.append(story.ratings)
elsif story.flights.any?
temp_story.flights.append(story.flights)
end
temp_story.description = "Added #{temp_story.ratings.size} new ratings and #{temp_story.flights.size} new flights"
temp_story.user_id = story.user_id
end
feed.append(temp_story)
else
feed.append(stories.second.first)
end
end
return feed.reverse
end

最新更新