3

我在 ruby​​ on rails 中有两个对象数组。我想组合它们并按两个不同的属性对它们进行排序。这可能吗?

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

任何想法将不胜感激。

4

2 回答 2

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  

然后在我的控制器中 -

@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]

我只是在我的视图中渲染@news,它很好地召唤了适当的部分。我希望得到一些反馈。

于 2013-04-14T03:53:10.503 回答
0
posts = Post.all
talks = Talk.all
posts+talks.sort do |a,b|
   attr_a = a.kind_of?(Post) ? 'created_at' : 'date_given'
   attr_b = b.kind_of?(Post) ? 'created_at' : 'date_given'
   a.send(attr_a) <=> b.send(attr_b)
end

应该有一种 SQL 方式来做到这一点,但是,这种方式更简单。

于 2013-04-14T03:12:40.880 回答