我想展示一个时间链接混合评论和帖子,所以我有这个对象

@posts = Post::all()
@comments = Comment::all()

如果我这样做
@post.each ...
... end
@comments.each ...
... end

我会得到第一个帖子,在这之后,评论。但我想要一个时间表,我怎么能创造这个?
我需要将两个对象组合在一起以创建一个有序列表,例如:
职务:
id | name | date
1 | post1 | 2015-01-01
2 | post2 | 2013-01-01

在评论中:
id | name | date
1 | comment1 | 2014-01-01
2 | comment2 | 2016-01-01

如果我这样做
每封邮件。。。
评论。每个。。。
结果是:
-post1
-post2
-comment1
-comment2

但我需要按日期订购
-post2
-comment1
-post1
-comment2

谢谢,也为我糟糕的英语感到抱歉。

最佳答案

Posts和comments是不同的模型(和不同的表),因此我们不能编写SQL来获取排序的集合、分页等。
通常我在需要混合时间线时使用下一种方法。
我有带TimelineItemsource_idsource_type字段的timeline_at模型。

class TimelineItem < ApplicationRecord
  belongs_to :source, polymorphic: true
end

然后,我添加了models logic以在需要时创建timeline_item实例:
has_many :timeline_items, as: :source
after_create :add_to_timeline

def add_to_timeline
  timeline_items.create timeline_at: created_at
end

然后搜索并输出
TimelineItem.includes(:source).order(:timeline_at).each { |t| pp t.source }

关于ruby-on-rails - 合并2个对象并分类 rails 5,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41812809/

10-13 04:46