在一个视图表中对多个模型进行排序

Posted

技术标签:

【中文标题】在一个视图表中对多个模型进行排序【英文标题】:Sorting multiple models in one view table 【发布时间】:2015-03-18 16:34:04 【问题描述】:

我有一个模型,它具有与之相关的各种不同类型的信息。

Opportunity.rb

has_many :notes
has_many :emails
has_many :calls

我目前在我调用的控制器中的显示页面上有 3 个表

@notes = @opportunity.notes.sorted
@emails = @opportunity.emails.sorted
@calls = @opportunity.calls.sorted

并将它们显示在 3 个表格中

我想按时间顺序对它们进行排序,以便获得时间线。

每个模型都有日期,我想按日期排序,然后按日期顺序返回对象。 IE。 表格如下:

Note | Content | 11-Feb | Bob
Call | Content | 07-Feb | Dave
Email | Content | 04-Feb | Steve
Call | Content | 03-Feb | Dave    
Note | Content | 01-Feb | Margaret

我不知道如何将控制器中的这些表合并到一个可以在视图中使用的对象中,这样我就可以创建一个表,按日期排序(“created_at”)并且仍然保持一切看起来不错并且干净的。

【问题讨论】:

【参考方案1】:

最简单的方法是将这 3 个集合组合成一个数组并按 created_at 排序。在您的控制器中:

@combined = (@notes + @emails + @calls).sort_by |record| record.created_at

然后您可以在视图中使用@combined 来显示时间线。

【讨论】:

或简称sort_by(&:created_at) 是的,虽然速度有点慢。 是的,我想这是有道理的,因为这将首先创建一个 proc 然后运行它,但不确定有多慢,必须对其进行测试。 这取决于 Ruby 的版本,但使用 to_proc 速记的速度损失可能会慢一个数量级。

以上是关于在一个视图表中对多个模型进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何从多个模型中对数据进行排序/排序?

在 seaborn 图表中对分类标签进行排序

在Django中对多个表进行筛选和排序

在 Eloquent 中对时间戳进行排序

在 WPF 中对 DataGrid 进行预排序

是否可以在文本视图中对数据进行排序?