首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并2个对象并对rails 5进行排序

合并2个对象并对rails 5进行排序
EN

Stack Overflow用户
提问于 2016-11-20 02:27:17
回答 2查看 105关注 0票数 1

我想显示一个混合评论和帖子的时间链接,这样我就有了这个对象

代码语言:javascript
复制
@posts = Post::all()
@comments = Comment::all()

如果我这样做

代码语言:javascript
复制
@post.each ...
... end
@comments.each ...
... end

我会得到第一个帖子,然后是评论。但是我想要一个时间表,我该如何创建它呢?

我需要组合这两个对象来创建一个有序列表,例如:

在post中:

代码语言:javascript
复制
id | name | date
1 | post1 | 2015-01-01
2 | post2 | 2013-01-01

在评论中:

代码语言:javascript
复制
id | name | date
1 | comment1 | 2014-01-01
2 | comment2 | 2016-01-01

如果我这样做post.each ..。comments.each ...

结果将是:

代码语言:javascript
复制
-post1
-post2
-comment1
-comment2

但我需要按日期订购才能拿到

代码语言:javascript
复制
-post2
-comment1
-post1
-comment2

谢谢,并为我丑陋的英语道歉。

EN

回答 2

Stack Overflow用户

发布于 2016-11-20 02:46:05

帖子和评论是不同的模型(和不同的表),所以我们不能编写SQL来获得排序的集合,以及分页等。

通常,当我需要混合时间线时,我会使用next方法。

我有source_idsource_typetimeline_at字段的TimelineItem模型。

代码语言:javascript
复制
class TimelineItem < ApplicationRecord
  belongs_to :source, polymorphic: true
end

然后,我在需要时添加模型逻辑来创建timeline_item实例:

代码语言:javascript
复制
has_many :timeline_items, as: :source
after_create :add_to_timeline

def add_to_timeline
  timeline_items.create timeline_at: created_at
end

然后,搜索和输出就像这样简单

代码语言:javascript
复制
TimelineItem.includes(:source).order(:timeline_at).each { |t| pp t.source }
票数 2
EN

Stack Overflow用户

发布于 2016-11-20 04:41:18

Solution#1您可以使用联合查询来实现这一点。

代码语言:javascript
复制
sql= 'SELECT id, name, date FROM posts UNION ALL SELECT id, name, date FROM comments ORDER BY date'
ActiveRecord::Base.connection.execute(sql)

但是,联合查询只有在两个表中具有相同的列名时才会起作用。

Solution#2在视图中添加排序逻辑。

如果你只是简单地在html页面上显示这些记录,那么让它们在页面上加载,而不需要任何特定的顺序,即(首先发布,然后评论)。编写javascript代码来排序DOM元素,这些元素将在页面加载后运行。

参考:Jquery - sort DIV's by innerHTML of children

Solution#3重构您的数据库模式,并将帖子和评论放在同一数据库表中。然后,您将能够对单个表进行查询。就像这样,

代码语言:javascript
复制
class Text < ActiveRecord::Base
end

class Post < Text 
end

class Comment < Text
end

查询将为Text.order(:date)

重构您的DB模式太多了,无法解决这个问题。如果它对您的应用程序有意义,就这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40696456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档