在一个视图表中对多个模型进行排序
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 速记的速度损失可能会慢一个数量级。以上是关于在一个视图表中对多个模型进行排序的主要内容,如果未能解决你的问题,请参考以下文章