我有一个Ruby数组,其中包含Post对象(一个Mongoid模型),其中created_at
方法返回一个Time
对象。我想要的是使用该方法(存在于数组上的每个元素上)对该数组进行排序。我试过了@posts.sort_by {|post| post.created_at}
但是没有用。我怎么能实现这个目标?谢谢!
[#<Post _id: 4ffd5184e47512e60b000003, _type: nil, created_at: 2012-07-11 10:12:20 UTC, title: "TestSecond", description: "TestSecond", slug: "assa", user_id: 4ffc4fd8e47512aa14000003>, #<Post _id: 4ffd518ee47512e60b000004, _type: nil, created_at: 2012-07-11 10:12:30 UTC, title: "TestFirst", description: "TestFirst", slug: "assadd", user_id: 4ffc4fd8e47512aa14000003>]
。
@posts = Array.new
@user.following.each do |user|
user.posts.each do |p|
@posts << p
end
end
答案 0 :(得分:0)
我不确定你为什么在这里有阵列。通常情况下,使用Mongoid查询时,您应该有Mongoid::Criteria
个实例,可以desc(:created_by)
或asc(:created_by)
开启,以便进行排序。
尽管如此,我想不出有任何理由sort_by
对你来说不合适,在我的应用程序上运行得很好(只是在控制台上试过)。
<强> UPD:强>
@user.following.each do |user|
user.posts.each do |p|
@posts << p
end
end
那么,仍然有一个mongoid集合,可能会做这样的事情:
@posts = @user.following.map(&:posts).inject { |posts, post| posts.concat post }
现在,您可以@posts.desc(:created_at)
。
<强> UPD2:强>
另外,为了拥有更清晰的代码,您可以在posts_from_following
上定义User
:
class User
def posts_from_following
following.map(&:posts).inject { |posts, post| posts.concat post }
end
end
然后,就这样做
@posts = @user.posts_from_following.desc(:created_at)
在您的控制器中。
答案 1 :(得分:0)
@posts.sort_by &:created_at
@posts.sort {|a, b| a.created_at <=> b.created_at }