在RoR中组合不同对象的数组,并按每个上的不同属性上的日期值进行排序

Chr*_*ins 3 ruby-on-rails ruby-on-rails-3

我在轨道上的ruby中有两个对象数组.我想将它们组合起来并按两个不同的属性对它们进行排序.这可能吗?

一个是'Post'记录数组,一个是'Talk'记录数组.它们都需要按日期排序.但对于Post,相关属性是created_at,而对于Talk,它是date_given.这种令人头疼的问题让我考虑消除两种不同的模型,并用更灵活的Post模型替换它们.

任何想法将不胜感激.

Chr*_*ins 5

我只是尝试了一些有用的东西,但我不确定它是否是处理这个问题的最佳方法.我只是为每个称为可排序日期的模型添加一个方法,并将其设置为我想要的.其中一个问题是created_at是一个Time,date_given是DateTime,所以我用这篇文章来处理Ruby中的DateTime和Time转换.

talk.rb

def sortable_date
  date_given
end  

post.rb

def sortable_date
  created_at.to_datetime
end  
Run Code Online (Sandbox Code Playgroud)

然后在我的控制器 -

@posts = Post.order('created_at DESC').limit(3)
@talks = Talk.order('date_given DESC').limit(3)

@news = @posts + @talks
@news.sort_by! &:sortable_date
@news = @news[1..4]
Run Code Online (Sandbox Code Playgroud)

我只是在我的视图中渲染@news,它很好地传达了适当的部分.我喜欢一些反馈.