我在 ruby on rails 中有两个对象数组。我想组合它们并按两个不同的属性对它们进行排序。这可能吗?
一个是“Post”记录数组,一个是“Talk”记录数组。它们都需要按日期排序。但是对于 Post,相关属性是 created_at,而对于 Talk,它是 date_given。这是让我考虑消除这两种不同模型并用更灵活的 Post 模型替换它们的一种令人头疼的问题。
任何想法将不胜感激。
我在 ruby on rails 中有两个对象数组。我想组合它们并按两个不同的属性对它们进行排序。这可能吗?
一个是“Post”记录数组,一个是“Talk”记录数组。它们都需要按日期排序。但是对于 Post,相关属性是 created_at,而对于 Talk,它是 date_given。这是让我考虑消除这两种不同模型并用更灵活的 Post 模型替换它们的一种令人头疼的问题。
任何想法将不胜感激。
我只是尝试了一些可行的方法,但不确定它是否是处理此问题的最佳方法。我只是为每个模型添加一个称为可排序日期的方法,并将其设置为我想要的。一个问题是 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,它很好地召唤了适当的部分。我希望得到一些反馈。
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 方式来做到这一点,但是,这种方式更简单。